我知道如果使用
通过segue连接,您可以在两个视图控制器之间传递信息override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
guard let destinationViewController = segue.destinationViewController as? searchTermViewController else { return }
destinationViewController.courseCodes = selectedCourses
}
}
如果由于.destinationViewController而没有segue,上面的代码会出错。如何在不必设置全局变量的情况下将信息传递给任意视图控制器?
答案 0 :(得分:0)
转到故事板,选择第二个视图控制器,转到“身份检查器”选项卡并提供StoryBoard ID值。这应该是识别视图控制器的唯一值。
现在,在第一个视图控制器中,您可以运行此代码。这基本上会创建第二个视图控制器的对象,设置属性值(用于传输数据)并推送它(与segue一样)
let ctrl = self.storyboard?.instantiateViewControllerWithIdentifier("detailsView")
as? SecondViewController
ctrl?.userId = 250 // data to pass.
self.navigationController?.pushViewController(ctrl!, animated: true)
提供userId
是SecondViewController
课程中的变量。更换
detailsView
包含您之前提供的故事板ID值。
class SecondViewController: UIViewController {
var userId : Int = 0
override func viewDidLoad() {
super.viewDidLoad()
// do something with self.userId
}
}
答案 1 :(得分:0)
您可以设置委托模式以执行此操作。
以下是在两个对象之间设置委托模式的步骤,其中对象A是对象B的委托,对象B将消息发送回A.步骤如下:
这是一个教程,为您提供一个工作示例https://www.youtube.com/watch?v=9LHDsSWc680