我是iOS新手,如何从UITabBarController
访问子视图控制器?目前,我有以下几点。
答案 0 :(得分:3)
您可以定义以下用于映射类的枚举:
enum TabType:Int {
case RequestTabBarController
case ActiveRequestsTableViewController
case RequestViewController
}
通过这种方式,您可以清楚地访问viewControllers
:
标签栏界面显示的根视图控制器数组。
您可以直接从UITabBarController
获取,这样做:
private weak var tabVc:UITabBarController?
var niceObject:Whatever?
//...//
override public func prepare(for segue: UIStoryboardSegue, sender: Any?) {
self.tabVc = segue.destination as? UITabBarController
if let vc = self.tabVc?.viewControllers?[TabType.RequestTabBarController.rawValue] as? RequestTabBarController {
vc.doWhatEver(niceObject)
}
}
答案 1 :(得分:1)
从上面的描述中我了解到你想要访问TabController的子代,以便更改它们的一些属性。如果我的理解是正确的,那么您可以使用UITabBarController的 viewcontrollers 属性来访问子项并设置属性。
答案 2 :(得分:0)
创建UITabBarController
的子类(对于您的情况,可能是ManageRequestTabBarController
)并实现UITabBarControllerDelegate
:
public func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController)
当您点击任何标签项并前往与该tabItem连接的viewController之前,将调用此委托。
此处viewController
是目标viewController。像这样使用它:
if viewController is YourDestinationVC {
let yourDestinationVC = viewController as! YourDestinationVC
yourDestinationVC.yourCustomValue = someValueYouWantToPass
}
答案 3 :(得分:0)
如果您在故事板中设置了UI,则可以在prepareForSegue
子类中实现UITabBarController
。每次childViewController
都会调用一次。要区分不同的childViewControllers
,您可以使用segueIdentifiers
或检查segues的destinationViewController
类型(假设每个childViewController
具有不同的类型)。