我有一个 mainTabBarController ,里面有一个 mainViewController
我在mainViewController中有mainTabBarController实例
问题是当我在mainTabBarC中为hello()函数添加通知调用时,会被调用两次
mainTabBarController:
class MainTabBarController : UITabBarController {
// Main Code
override func viewDidLoad() {
print("viewDidLoad")
NotificationCenter.default.addObserver(self, selector: #selector(hello), name: "sayHello", object: nil)
}
@objc func hello(){
print("Hello")
}
}
mainViewController:
class MainViewController: UITableViewController {
// Classes
let mainTabBarController = MainTabBarController()
}
在AppDelegate中,我想在应用程序变为活动时调用hello函数
func applicationDidBecomeActive(_ application: UIApplication) {
NotificationCenter.default.post(name: "sayHello", object: nil)
}
现在的问题是,我有mainTabBarC,在其中我有mainViewController,它也包含mainTabBarC ..
hello()函数将被调用2次
如何在不创建全新实例的情况下从MainViewController调用MainTabBarController函数?
答案 0 :(得分:1)
您的MainViewController
已经拥有对MainTabBarController
:
您可以通过两种不同的方式使用它:
// Option 1
if let tabBarController = tabBarController {
// do something with your tabBarController
}
// Option 2
guard let tabBarController = tabBarController else { return }
// do something with your tabBarController
答案 1 :(得分:0)
我不确定我是否正确行事,但MainViewController中的正确代码可能是:
var mainTabBarController: MainTabBarController!
override func viewDidLoad() {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
mainTabBarController = storyboard.instantiateViewController(withIdentifier: "MainTabBarController") as! MainTabBarController
}