我知道有向后传递数据的答案,但它们是连续视图控制器的答案。我有3个视图控制器和一个导航控制器。所有的赛段都是“show segue”。我想将数据从VC3传递给VC1。我试图使用委托,但被卡住:iOS/Swift 3:在非连续视图控制器之间向后传递数据
protocol Delegate:class {
func getCityId(with id: String)
}
Class VC3:UIViewController{
weak var delegate: Delegate?
let id:String?
func passDataBackwards() {
delegate?.getCityId(with: self.id!)
}
}
Class VC1:UIViewController, Delegate{
func getCityId(with id: String) {
print ("id from search: \(id)")
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let vc3 = (segue.destination as! VC3)
vc3.delegate = self
}
}
我的问题是,我有我的源和目标之间的2个塞格斯。 您的善意帮助将不胜感激。
[unwind segue](https://developer.apple.com/library/content/technotes/tn2298/_index.html)是你需要的所有东西 – Paulw11
所以不能用委托来完成?我的VC3有一个表格视图。每当我点击一个单元格时,我想移动到VC1并将数据传递给它。我不确定我如何放松地做到这一点。 – benh
你可以使用委托,但它更混乱。您需要定义协议并通过不需要它的视图控制器“下线”传递委托。通过使用unwind方法,VC1可以访问故事板segue的'sourceViewController'属性,通过它的unwind方法来获取对VC3的引用。然后它可以从vc3的属性中读取所需的数据 – Paulw11