将数据从tableview传递到Swift中的选项卡栏视图控制器.

Liv*_*eNL 3 uitabbarcontroller uitableview ios swift

在我的故事板上,我有一个部分,其中一个带有表视图的视图控制器放在一个标签栏控制器之前.此选项卡栏有两个视图控制器.之前我已经使用了表格视图,当我点击一个单元格时,我传递给另一个Viewcontroller,该控制器加载了另一个带有表格的视图控制器和来自第一个表格中推送单元格的id的单元格.像这样:

tableview控制器,准备segue:

        if segue.identifier == "overviewSegue" {
          var caseViewController: CaseViewController = segue.destinationViewController as CaseViewController
          var caseIndex = overviewTableView!.indexPathForSelectedRow()!.row
          var selectedCase = self.cases[caseIndex]
        caseViewController.caseitem = selectedCase
    }
Run Code Online (Sandbox Code Playgroud)

这很好用.现在我想做同样的事情,但唯一的区别是最后一个视图控制器是tabbar控制器的一部分.问题是我无法将数据传递给最后一个表视图控制器.

我尝试了几件事,但我无法将数据指向tabbar表视图.Segue是不可接近的,并且目标不是表视图控制器,而是tabbar控制器等.问题是,如何将数据从tableview通过tabbar控制器传递到另一个视图控制器.

Liv*_*eNL 6

我找到了一个解决方案:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
      if segue.identifier == "toTabController" {
        var tabBarC : UITabBarController = segue.destinationViewController as UITabBarController
        var desView: CaseViewController = tabBarC.viewControllers?.first as CaseViewController

        var caseIndex = overviewTableView!.indexPathForSelectedRow()!.row
        var selectedCase = self.cases[caseIndex]

        desView.caseitem = selectedCase
      }
    }
Run Code Online (Sandbox Code Playgroud)

简单说明:您需要到达Tab栏控制器并选择他的视图控制器.它通常有两个,所以你可以选择第一个.之后,定义它所属的类,您可以像以前一样传递数据.