将数据传递给“未知”viewcontroller

时间:2017-10-08 23:02:36

标签: ios swift xcode uiviewcontroller uistoryboard

我有很多视图控制器,分布在很多故事板上。

当只知道viewcontroller标识符时,有没有办法将数据传递给viewcontroller。

从plist中读取viewcontroller标识符和storyboard名称,并且像这样加载viewcontroller:

let storyboard = UIStoryboard(name: plistdata.storyboard, bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: menuItem.identifier)
navigationController?.pushViewController(vc, animated: true)

由于我无法将viewcontroller转换为正确的类,因此我无法设置数据。可以从字符串中转换类,例如

let vc = storyboard.instantiateViewController(withIdentifier: menuItem.identifier) as! ClassFromString("MyDestinationViewController")

或者让数据模型跟踪正在推送哪个viewcontroller是一种更好的方法,并在加载后立即在目标viewcontroller中获取必要的数据?

2 个答案:

答案 0 :(得分:1)

当你不知道某个类的东西,但是你想要能够与它交谈时,这就是协议的用途。如果您的每个匿名视图控制器类都采用MyProtocol,并且MyProtocol需要takeData方法,那么您可以将vc转换为MyProtocol并调用takeData,而不再提供有关哪个类的更多信息这个视图控制器是。

答案 1 :(得分:0)

我认为最佳方法是Segue ...因为Segue使您的ViewControllers数组成为可以轻松推送,弹出和发送数据。