如何从具有不同 类 的不同视图控制器调用函数
How to call a function from a different view controller with different classes
当你在屏幕上按下时,我试图让一个位于不同视图控制器中的函数被称为usaully,我只会做
viewControllerFuncIsIn().NameOfFunc()
但是因为具有我试图调用的功能的视图控制器 class 是一个 SCNView。它给了我这个 ns coder 的错误,因为目前在 Skscene 中
我试图调用的函数位于 viewdidload 正下方的名为 Extra1 的 class 中(不在其中)。
更新以下评论:
Extra1(coder:NSCoder())!.see()
我找到了问题的答案
func mySelector(elem: AnyObject) {
Extra1().see()
}
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.mySelector), name: "see", object: nil)
NSNotificationCenter.defaultCenter().postNotificationName("see", object: self)
给你的小例子:
一对一连接时使用委托
代表:
创建协议:
protocol TestViewControllerDelegate {
func finishTask(sender: TestViewController)
}
为委托创建参考。它应该很弱很重要。
weak var delegate:TestViewControllerDelegate?
退出你 class。
extension MainViewController: TestViewControllerDelegate {
func finishTask(sender: TestViewController) {
}
}
呼叫代表:
delegate?. finishTask(self)
当连接是一对多时使用通知。
通知:
添加通知观察员。
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ClassName.test), name:"NotificationIdentifier", object: nil)
Post通知。
NSNotificationCenter.defaultCenter().postNotificationName("NotificationIdentifier", object: nil)
当你在屏幕上按下时,我试图让一个位于不同视图控制器中的函数被称为usaully,我只会做
viewControllerFuncIsIn().NameOfFunc()
但是因为具有我试图调用的功能的视图控制器 class 是一个 SCNView。它给了我这个 ns coder 的错误,因为目前在 Skscene 中
更新以下评论:
Extra1(coder:NSCoder())!.see()
我找到了问题的答案
func mySelector(elem: AnyObject) {
Extra1().see()
}
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.mySelector), name: "see", object: nil)
NSNotificationCenter.defaultCenter().postNotificationName("see", object: self)
给你的小例子:
一对一连接时使用委托
代表:
创建协议:
protocol TestViewControllerDelegate {
func finishTask(sender: TestViewController)
}
为委托创建参考。它应该很弱很重要。
weak var delegate:TestViewControllerDelegate?
退出你 class。
extension MainViewController: TestViewControllerDelegate {
func finishTask(sender: TestViewController) {
}
}
呼叫代表:
delegate?. finishTask(self)
当连接是一对多时使用通知。
通知:
添加通知观察员。
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ClassName.test), name:"NotificationIdentifier", object: nil)
Post通知。
NSNotificationCenter.defaultCenter().postNotificationName("NotificationIdentifier", object: nil)