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

时间:2015-01-22 22:18:08

标签: ios swift uitabbarcontroller viewcontroller

我有一个标签栏类(附在我的标签栏控制器上),如下所示:

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

我的接收视图控制器是这样的:

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

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

我在输出窗口中得到的结果与预期的一样。我点击的每个标签栏项目都会添加"测试工作!"到阵列。

我的问题是:

我如何使用我使用的CaptionsController方法将另一个viewcontroller类的值设置为tabBarController

此视图是"孩子的一部分"标签栏本身,所以我假设它已经有一个实例。我发现的所有示例都只显示了这一点,但没有显示如何从其他类中获取数据。

1 个答案:

答案 0 :(得分:1)

想要传递数据的UIViewController可以将其存储在AppDelegate课程中。然后,UITabBarController委托方法可以将其拉出并在接收UIViewController上设置属性。

此外,假设您的应用基于标签控制器,您的AppDelegate可以使用window?.rootViewController as UITabBarController找到它。