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

Transfer data from tab bar controller to ViewController

我有一个典型的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 提供给他使用?

你想要做的是,在你的 ViewController class.

中添加一个名为 number 或任何你喜欢的 属性
class ViewController: UIViewController {
  var number: Int!
}

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

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)
    }
  }

}

除非,您要在每次选择标签时设置该值吗?