如何从具有不同 类 的不同视图控制器调用函数

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)