如何调用另一个 ViewController 中的函数?

How to invoke a function in another ViewController?

如何在另一个第一个 ViewController swift 文件中调用 function/method 而 control/state 在第二个 ViewController 中。 在 Second ViewController 中,当按下按钮时,secondViewController 应调用 firstViewController 中的函数,并将 control/state 传递给它被按下的 thirdViewController来自第二个ViewController.

secondViewController Button Action
@IBAction func EnterGallery(_ sender: Any){
// Want to invoke EnterGallery function in firstViewController and dismiss from secondViewController
self.dismiss(animated: true, completion: nil)}

firstViewController pushViewController function
func EnterGallery() {
let dest = self.storyboard?.instantiateViewController(withIdentifier:
"GalleryViewController") as! GalleryViewController // thirdViewController
 self.navigationController?.pushViewController(dest, animated: true)
 }

请注意:我没有将任何数据从第二个ViewController传递到第一个ViewController。我只是想让我的 firstViewController 推到 thirdViewController 而我只是从 secondViewController 中解雇,它是从 firstViewController 中用 present 函数呈现的。 一旦我从 secondViewController 退出,我希望我的屏幕直接转到 thirdViewController。

基本上我只想在另一个 ViewController 中调用一个函数,而不需要从初始 ViewController 传递任何数据。所以我不能使用 Protocols and Delegates 或 Notifications and Observers。我应该如何处理这个问题? 还有很多其他情况我需要使用这种类似的功能。所以我不确定如何准确执行此操作。 由于我是 Swift 的新手,我们将不胜感激。 提前致谢。

Google 为此委托模式。 YT:https://youtu.be/DBWu6TnhLeY 希望这可以帮助你。顺便说一下,即使您不想在两者之间传递数据,委托模式也能正常工作。

您的 viewController 应该了解其他 viewController 并且应该能够与他们互动。

这是一个很好的 article 关于在 viewController 之间传递数据(或者只是在 viewController 之间交互 - 随你喜欢)

最常见的做法是委托模式。关于委派的两个词:

创建委托协议:

protocol MyDelegate {
    func doSmth()
}

将委托 属性 添加到 viewController,这将触发 anotherViewController 中的某些内容:

var delegate: MyDelegate?

anotherViewController 应符合 MyDelegate 协议:

class anotherViewController: MyDelegate {
    func doSmth() {
        print("I am doing something")
    }
}

然后把你符合MyDelegate协议的class赋值给这个属性

viewController.delegate = anotherViewController

就是这样!现在您可以在 viewController

中触发委托方法
delegate.doSmth()