访问 UITabBarController 的子视图控制器
Accessing child view controllers of a UITabBarController
我是 iOS 的新手,如何访问子视图控制器表单 UITabBarController
?目前,我有以下内容。
- RequestTabBarController
- ActiveRequestsTableViewController
- RequestViewController
子视图控制器在故事板中使用 Relationship Segue
连接。我想在 UITabBarController
的子视图中设置一些属性。这是如何实现的。
故事板
创建 UITabBarController
的子类(对于您的情况可能是 ManageRequestTabBarController
)并实现 UITabBarControllerDelegate
:
public func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController)
当您点击任何选项卡项时以及转到与该选项卡项连接的 viewController 之前调用此委托。
这里viewController
是目的地viewController。像这样使用它:
if viewController is YourDestinationVC {
let yourDestinationVC = viewController as! YourDestinationVC
yourDestinationVC.yourCustomValue = someValueYouWantToPass
}
根据您上面的描述,我了解到您想要访问 TabController 的子级以更改它们的某些属性。如果我的理解是正确的,那么您可以使用 UITabBarController 的 viewcontrollers 属性 来访问子项并设置属性。
如果您在情节提要中设置 UI,则可以在 UITabBarController
子类中实现 prepareForSegue
。每 childViewController
被调用一次。要区分不同的 childViewControllers
,您可以使用 segueIdentifiers
或检查 segues 的 destinationViewController
类型(假设每个 childViewController
都有不同的类型)。
您可以定义以下枚举来映射您的 类:
enum TabType:Int {
case RequestTabBarController
case ActiveRequestsTableViewController
case RequestViewController
}
通过这种方式,您可以干净地访问您的 viewControllers
:
An array of the root view controllers displayed by the tab bar interface.
您可以直接从 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)
}
}
我是 iOS 的新手,如何访问子视图控制器表单 UITabBarController
?目前,我有以下内容。
- RequestTabBarController
- ActiveRequestsTableViewController
- RequestViewController
子视图控制器在故事板中使用 Relationship Segue
连接。我想在 UITabBarController
的子视图中设置一些属性。这是如何实现的。
故事板
创建 UITabBarController
的子类(对于您的情况可能是 ManageRequestTabBarController
)并实现 UITabBarControllerDelegate
:
public func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController)
当您点击任何选项卡项时以及转到与该选项卡项连接的 viewController 之前调用此委托。
这里viewController
是目的地viewController。像这样使用它:
if viewController is YourDestinationVC {
let yourDestinationVC = viewController as! YourDestinationVC
yourDestinationVC.yourCustomValue = someValueYouWantToPass
}
根据您上面的描述,我了解到您想要访问 TabController 的子级以更改它们的某些属性。如果我的理解是正确的,那么您可以使用 UITabBarController 的 viewcontrollers 属性 来访问子项并设置属性。
如果您在情节提要中设置 UI,则可以在 UITabBarController
子类中实现 prepareForSegue
。每 childViewController
被调用一次。要区分不同的 childViewControllers
,您可以使用 segueIdentifiers
或检查 segues 的 destinationViewController
类型(假设每个 childViewController
都有不同的类型)。
您可以定义以下枚举来映射您的 类:
enum TabType:Int {
case RequestTabBarController
case ActiveRequestsTableViewController
case RequestViewController
}
通过这种方式,您可以干净地访问您的 viewControllers
:
An array of the root view controllers displayed by the tab bar interface.
您可以直接从 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)
}
}