2017-07-03 79 views
1

我有一個UITabBarController。使用界面生成器我添加了多個視圖控制器。這些viewController都是同一個類,但唯一改變的是一個參數。從UITabBarController初始化viewControllers

我想擴展UITabBarController,以便在視圖控制器初始化時添加此參數,但我不知道如何在UITabBarController擴展中執行此操作。哪裏是正確的地方做到這一點?

+0

目前,您的控制器由'Interface Builder'初始化。如果您想自己初始化控制器並添加一些參數,最好從代碼中添加控制器,而不是從界面構建器中添加。 –

+0

這是有道理的,但必須有一種方法來添加參數...我想抓住視圖控制器在視圖中做了負載的TabBar控制器,並添加參數...但我覺得這是骯髒的! –

+0

看看'UITabbarController'的代表,有一個函數[didSelectViewController](https://developer.apple.com/documentation/uikit/uitabbarcontrollerdelegate/1621173-tabbarcontroller?language=objc),你可以使用它來根據索引設置參數。但每次選擇要顯示的選項卡索引時都會設置它。 –

回答

1

我也面臨的問題一樣,在這我想顯示了在標籤欄控制器的第五個標籤視圖控制器的流行, 我用這個:

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { 

    if(viewController == tabBarController.viewControllers?[4]){ 
     let storyboard : UIStoryboard = UIStoryboard(name: "AfterLogin", bundle: nil) 
     let vc = storyboard.instantiateViewController(withIdentifier: "MorePopUpVC") 
     vc.modalPresentationStyle = .popover 
     let popover = vc.popoverPresentationController 
     popover?.delegate = self 
     popover?.permittedArrowDirections = .down 
     popover?.sourceView = self.tabBar 
     popover?.sourceRect = ((self.orderedTabBarItemViews()).last?.frame)! 
     vc.preferredContentSize = CGSize(width: 120, height: 132) 
     present(vc, animated: true, completion:nil) 
     return false 
    } 
    return true 
} 

這是我如何改變第五個標籤的作用,

你可以用它喜歡:

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { 

     let storyboard : UIStoryboard = UIStoryboard(name: "YOUR STORYBOARD NAME", bundle: nil) 
     let vc = storyboard.instantiateViewController(withIdentifier: "YOUR VIEW CONTROLLER IDENTIFIER") 
     if(viewController == tabBarController.viewControllers?[4]){ 
      vc.type = "PARAMETER YOU WANT" 
     } 
     present(vc, animated: true, completion:nil) 
     return false 
} 

我認爲它幫助。