调用其他viewcontroller并创建新实例

时间:2018-02-09 20:30:49

标签: swift variables

我有一个 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函数?

2 个答案:

答案 0 :(得分:1)

您的MainViewController已经拥有对MainTabBarController

的引用

enter image description here

您可以通过两种不同的方式使用它:

// 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
}