如何在 Swift 中使用 TabBarController 在两个 ViewController 之间传递数据

How to pass data between two ViewControllers with TabBarController in Swift

我有一个标签栏 class(附在我的标签栏控制器上),像这样:

class CaptionTabBarController: UITabBarController, UITabBarControllerDelegate {

  func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
    var logView = self.viewControllers![2] as CaptionsController
    logView.log.append("test working!")
  }

  override func awakeFromNib() {
    self.delegate = self;
  }
}

而我的接收viewcontroller是这样的:

class CaptionsController: UIViewController {

 @IBOutlet weak var captionSearchBar: UISearchBar!
 @IBOutlet weak var captionsTitle: UILabel!
 var receiveImage:UIImage!
 var receiveCategoryText:String!
 var log = [String]()

 override func viewDidAppear(animated: Bool) {
  super.viewDidAppear(animated)
  println(log)
 }
}

当我在 CaptionTabBarController 中明确设置 logView.log 时,这有效。

我在输出 windows 中得到的结果符合预期。我单击的每个选项卡栏项目都会将 "test working!" 添加到数组中。

我的问题是:

如何使用我正在使用的 tabBarController 方法从另一个 viewcontroller class 到 CaptionsController 获取值?

这个视图是标签栏本身 "child" 的一部分,所以我假设它已经有一个实例。我发现的所有例子都只是展示了这一点,但没有展示如何从另一个 class.

获取数据

想要传递数据的UIViewController可以存储在你的AppDelegateclass上。然后 UITabBarController 委托方法可以将其关闭并在接收 UIViewController.

上设置属性

此外,假设您的应用程序基于选项卡控制器,您的 AppDelegate 可以通过 window?.rootViewController as UITabBarController 找到它。