从UITabBarController初始化viewControllers
问题描述:
我有一个UITabBarController。使用界面生成器我添加了多个视图控制器。这些viewController都是同一个类,但唯一改变的是一个参数。从UITabBarController初始化viewControllers
我想扩展UITabBarController,以便在视图控制器初始化时添加此参数,但我不知道如何在UITabBarController扩展中执行此操作。哪里是正确的地方做到这一点?
答
我也面临的问题一样,在这我想显示了在标签栏控制器的第五个标签视图控制器的流行, 我用这个:
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
}
我认为它帮助。
目前,您的控制器由'Interface Builder'初始化。如果您想自己初始化控制器并添加一些参数,最好从代码中添加控制器,而不是从界面构建器中添加。 –
这是有道理的,但必须有一种方法来添加参数...我想抓住视图控制器在视图中做了负载的TabBar控制器,并添加参数...但我觉得这是肮脏的! –
看看'UITabbarController'的代表,有一个函数[didSelectViewController](https://developer.apple.com/documentation/uikit/uitabbarcontrollerdelegate/1621173-tabbarcontroller?language=objc),你可以使用它来根据索引设置参数。但每次选择要显示的选项卡索引时都会设置它。 –