簡體   English   中英

是否可以在 UITabBarController 上設置協調器屬性?

[英]Is it possible to set a coordinator property on a UITabBarController?

我正在嘗試在基於選項卡的應用程序中實現滑出式菜單。 我有一個包含 MenuViewController 和 UITabBarController 的容器控制器,它符合 MasterDelegate 協議,當按下位於單個選項卡上的漢堡按鈕時,它告訴容器滑出 MenuViewController。 我的問題是 UITabBarController 的 coordinator 屬性在配置 UITabBarController 之后才設置,因此 UITabBarController 中的屬性以及包含按鈕的選項卡的 ViewController 始終為零。

這是屬於設置 UITabBarController 的容器的代碼:

func configureHomeController() {

    centerController = MainTabBarController()

    // Make sure to set delegate of homeController
    centerController.masterDelegate = self

    print("MainContainterController: Setting the MainTabBarController delegate")

    if centerController.masterDelegate != nil {
    print("MainContainerController: MainTabBarController Delegate set")
    }

    view.addSubview(centerController.view)

    // Add the navigationController containing the HomeController as a child to the ContainerController
    addChild(centerController)

    // Home controller didMove to the parent container of self, which is the ContainerController
    centerController.didMove(toParent: self)
}

在 TabBarController 中,有一個打印語句在 TabBarController 配置后執行,它告訴我 masterDelegate 屬性是否為 nil。 這是在容器控制器打印上述兩個語句之前打印的。 由於打印了第二個打印語句,我知道協調器正在設置,但設置為時已晚。

我的問題是如何在完成配置 UITabBarController 之前設置 masterDelegate? 或者有沒有辦法在事后設置該屬性?

為您的 tabbarcontroller 創建一個方便的 init 並將委托傳遞給它。 像這樣的東西:

convenience init(masterDelegate: MasterDelegate) {
    self.init(nibName: nil, bundle: nil)

    self.masterDelegate = masterDelegate
}

當你設置 TabBarController 時,像這樣實例化它:

   centerController = MainTabBarController(masterDelegate: self)
   centerController.configure()

另外,在 MainTabBarController 中創建一個配置函數。 在那里,設置您的 viewControllers。

 (in MainTabBarController)
   func configure() {
       viewControllers = [viewController, viewController2, ....]
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM