访问UITabBarController的子视图控制器

时间:2018-01-30 07:07:21

标签: ios swift uitabbarcontroller uistoryboardsegue

我是iOS新手,如何从UITabBarController访问子视图控制器?目前,我有以下几点。

  1. RequestTabBarController
  2. ActiveRequestsTableViewController
  3. RequestViewController
  4. 使用故事板中的Relationship Segue连接子视图控制器。我想在UITabBarController的子视图中设置一些属性。如何实现这一目标。

    故事板

    storyboard_reference

4 个答案:

答案 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具有不同的类型)。