当我点击我的后退按钮(UINaviagtionController)时,我正试图将数据从SecondViewController传递到我的FirstViewController。
为了将我的数据从FirstViewController传递给SecondViewController我执行此操作:
if segue.identifier == "showSecondVC" {
let vc = segue.destination as! SecondViewController
vc.rows = rows[pathForAVC]
vc.lap = lapTime[pathForAVC]
vc.indexPath = pathForAVC
}
但我不知道如何将数据从SecondViewController传递到FirstViewController,我真的不理解Stack Overflow上有关它的主题。
点击此处,我想传输它:
感谢。
答案 0 :(得分:1)
您应该拥有自定义协议,例如:
public protocol SendDataDelegate: class {
func sendData(_ dataArray:[String])
}
在这里,我想您要将单个数组发送回FirstViewController
然后使您的第一个视图控制器符合自定义协议,例如:
class FirstViewController: UIViewController, SendDataDelegate
在第二个视图控制器中,为该协议创建委托变量,例如:
weak var delegate: SendDataDelegate?
然后你抓住后面的动作,在里面你调用自定义协议函数,例如:
self.delegate?.sendData(arrayToSend)
在第一个viewController
中,在准备segue函数时,只需将委托设置为
vc.delegate = self
答案 1 :(得分:1)
您可以使用委托模式。你可以像这样抓住后退按钮按下事件并更新数据
override func viewWillDisappear(_ animated: Bool) {
if self.isMovingFromParentViewController {
self.delegate.updateData( data)
}
}
有关代表的更多信息,您可以浏览this。
实际上事情取决于您的要求,如果您希望在第一个视图控制器中更新数据,只要在第二个视图控制器中更新,您需要在数据更新后立即调用委托。但正如你提到的那个问题,你只想在后退按钮上更新它,上面就是这样做的地方。
另一种方法是将Datasource作为单例,以便所有视图控制器都可以使用它,并且更改将反映在所有视图控制器中。但是如果绝对必要的话,创建单例,因为这些讨厌的人在你的应用程序运行的整个过程中都会闲逛。