从UITabBarController初始化viewControllers

问题描述:

我有一个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),你可以使用它来根据索引设置参数。但每次选择要显示的选项卡索引时都会设置它。 –

我也面临的问题一样,在这我想显示了在标签栏控制器的第五个标签视图控制器的流行, 我用这个:

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 
} 

我认为它帮助。