2017-07-24 114 views
0

我想从SecondViewController传递数据到我的FirstViewController,当我点击我的后退按钮(UINaviagtionController)。(重新) - 通过点击后退按钮后通过数据

对于来自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,我真的不明白,关于它的堆栈主题溢出。

我想转让,当我点击这里:

Back button from a NavigationBar

感谢。

回答

1

您可以使用委托模式。你可以抓住后退按钮按下事件像这样和更新数据

override func viewWillDisappear(_ animated: Bool) { 
    if self.isMovingFromParentViewController { 
     self.delegate.updateData(data) 
    } 
    } 

有关代表你可以通过this更多信息。

其实事情都取决于你的需求,如果你想要的数据在第一视图控制器,只要它是在第二个视图控制器的最新更新,你需要尽快更新数据调用委托。但正如你刚才提到的问题,你希望它只是在后退按钮上更新,以上是做这件事的地方。

另一种方法是将数据源设置为单例,以便它可用于所有视图控制器,并且更改将反映在所有视图控制器中。但是,如果绝对必要的话,创建单身人士,因为这些讨厌的人在你的应用程序运行的整个过程中一直存在

+0

感谢您的答案兄弟和谢谢你的网站在斯威夫特。我会做你的关于代表的教程。 – pierreafranck

1

你应该有一个自定义的协议,如:

public protocol SendDataDelegate: class { 
    func sendData(_ dataArray:[String]) 
} 

在这里,您要发送单个阵列回FirstViewController

然后,让你的第一个视图控制器,以符合自定义协议,我想,如:

class FirstViewController: UIViewController, SendDataDelegate 

在第二视图控制器,创建一个委托的可变用于该协议,如:

weak var delegate: SendDataDelegate? 

,然后你赶上后面的动作和里面你打电话给你的自定义协议的功能,如:

self.delegate?.sendData(arrayToSend) 

在第一viewController,在赛格瑞功能的准备只需设置类似的委托

vc.delegate = self 
+0

你能解释一下吗? – pierreafranck

+0

@pierreafranck我已经更新了答案,请检查 –

+0

我也会试试。感谢您的更新 – pierreafranck