在不相关的视图控制器之间传递数据

时间:2016-02-17 10:25:03

标签: swift macos cocoa nstableview nsviewcontroller

如何在两个不同(不相关)的视图控制器之间传递数据?根据我对代表的理解,需要某种关系(例如,准备segue等)。我有一个单独的视图控制器,显示搜索结果,我想在一个不同的屏幕上触发一个表视图,使用一个单独的视图控制器滚动到该位置,并突出显示该行。为了做到这一点,我需要让表格视图知道要突出显示的内容。

3 个答案:

答案 0 :(得分:0)

为此,您可以使用NSNotificationCenter(Apple Docs

简而言之,在接收viewController中,您在viewDidLoad中声明一个观察者:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "actOnSpecialNotification", name: "myNotification", object: nil)

和相应的函数

func actOnSpecialNotification() {
    self.notificationLabel.text = "I heard the notification"
}

当您需要向该viewController发送消息时,在发送的viewController中,您发送以下消息:

NSNotificationCenter.defaultCenter().postNotificationName("myNotification", object: self)

有关详细信息,我邀请您查看Andrew Bancroft撰写的精心编写的教程:The Tutorial

答案 1 :(得分:0)

除了已经提到的通知之外,您还可以使用appDelegate访问全局:

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let aVariable = appDelegate.someVariable

答案 2 :(得分:0)

更简单的方法是在使用者控制器中使用静态成员,然后在生产者控制器中设置它。当使用者控制器变为活动状态时,您可以使用该数据并清除它,以便下次不再使用它。这种方法的一个优点是它可以将视图控制器所需的数据保存在自身内,而不是分布在应用程序中,例如使用全局变量时。