(重新) - 点击后退按钮后通过数据

时间:2017-07-24 12:15:08

标签: swift

当我点击我的后退按钮(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上有关它的主题。

点击此处,我​​想传输它:

Back button from a NavigationBar

感谢。

2 个答案:

答案 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作为单例,以便所有视图控制器都可以使用它,并且更改将反映在所有视图控制器中。但是如果绝对必要的话,创建单例,因为这些讨厌的人在你的应用程序运行的整个过程中都会闲逛。