将数据从工作表传递回ViewController

时间:2016-10-23 18:35:42

标签: swift xcode macos cocoa swift3

我想将Sheet中的数据传递回ViewController 我尝试了代理,但它不起作用,因为当我关闭工作表(self.dismiss(self))时,后面的ViewController不会刷新。

enter image description here

1 个答案:

答案 0 :(得分:2)

您必须使用一个名为NSNotificationCenter的单例类

在ViewController类

中调用presentViewController方法之前添加此语句
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.funcToBeExecuted(_:)), name:String, object: nil)

在Sheet类

中的dismissViewController之前添加此语句
NSNotificationCenter.defaultCenter().postNotificationName(String, object: AnyObject?, userInfo: [NSObject : AnyObject]?))

从技术上讲,这就是它的工作原理。您可以在应用程序中设置一个等待应用程序发布的观察者,以执行#selector方法。当应用程序执行postNotification语句时,内存中具有与postNotification相同NotificationName的所有观察者都会被触发并实现其分配的#selectors。

参数中postNotificationName中的userInfo有助于将数据从一个地方传递到另一个地方,甚至传递给同名的多个观察者。因此,在NSNotification选择器要执行的方法中,我们可以访问userInfo,如下所述。

func funcToBeExecuted(notification: NSNotification)
{
    let receivedData = notification.userInfo
}

这应该适合你。