如何调用另一个 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()
如何在另一个第一个 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()