将数据从标签栏控制器传输到ViewController

时间:2019-09-26 18:07:21

标签: ios swift uitabbarcontroller

我有一个典型的ViewController:

class ViewController: UIViewController{
override func viewDidLoad() {}
}

我还有TabBarController,它向我显示当前场景的编号:

class TabBarController: UITabBarController {
  override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem!) {
    if item == (self.tabBar.items as! [UITabBarItem])[0]{
      print(1)
    }
    else if item == (self.tabBar.items as! [UITabBarItem])[1]{
      print(2)
    }
  }

}

我需要ViewController知道其场景编号。 (1或2)。我该如何从TabBarController传递给他此号码?

1 个答案:

答案 0 :(得分:1)

您想要做的是,将number或任何您喜欢的属性添加到ViewController类中。

class ViewController: UIViewController {
  var number: Int!
}

然后在tabBarController的viewDidLoad中循环遍历视图控制器,检查它们是否为ViewController类型,然后将其number属性设置为tabBarController的视图控制器的索引:< / p>

class TabBarController: UITabBarController {

  override func viewDidLoad() {
    super.viewDidLoad()
    for (index,vc) in (viewControllers!.enumerated())! {
      if let viewController = vc as? ViewController {
        vc.number = index
      }
    }
  }

  override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem!) {
    if item == (self.tabBar.items as! [UITabBarItem])[0]{
      print(1)
    }
    else if item == (self.tabBar.items as! [UITabBarItem])[1]{
      print(2)
    }
  }

}

除非您选择了选项卡,否则是否要设置该值?