如何在Swift中的两个UITableViewController之间传递数据?

时间:2016-04-03 01:07:49

标签: ios swift uitableview

我试图用Swift在XCode中的两个UITableViews之间传递一个参数。

我在这里看到了一些关于SO的问题,但即使我按照说明操作,我仍然被困住了。

我已经设置了故事板。我在这里遇到了一个问题,因为我发现的大多数指南都使用了“Show”Segue,但出于某种原因我只能使用“Push”Segue。我无法拖动并创建“Show”Segue(也许是因为我在Windows上通过远程桌面使用Mac并且Mac不理解Ctrl / Command键?)

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
  selectedIndex = indexPath.row
}

override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!) {
  if (segue.identifier == "secondSegue") {
    let controller = segue.destinationViewController as! SecondViewController
    controller.valuePassed = selectedIndex
  }
}

即使它有效,但由于某种原因,传递的索引永远不会是当前索引。相反,在第二个屏幕上收到的索引是先前选择的索引。

我也尝试使用“performSegueWithIdentifier”,但是当我点击一个项目时,我的第二个屏幕会打开两次。我认为这是因为它们之间存在“推送”链接以及“performSegueWithIdentifier”。

我不知道如何在没有链接故事板上的两个屏幕的情况下创建Segue标识符。

所以,我不确定我的代码是否错误,如果我应该以某种方式创建一个“Show”Segue(我对iOS编程真的很新,我不知道Push和Show之间的实际区别UITableView的上下文),如果我应该以某种方式创建Segue标识符而不连接故事板上的屏幕,等等......我真的被困在想法中。

感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:2)

如果要使用performSegueWithIdentifier,请从视图控制器中拖动segue,而不是从表格视图单元格中拖动。否则,就像你说的那样,它会触发两次。

您可以使用UITableView的{​​{1}}属性从表格视图中获取,而不是存储selectedIndex。它返回一个可选项,因此请务必正确打开它。

答案 1 :(得分:0)

尝试上面提到的Tim并将prepareForSegue代码更改为:

if segue.identifier == "secondSegue" {

        let destinationVC : SecondViewController = segue.destinationViewController as! SecondViewController

        // you can now pass whatever data you need to to the next view controller ... for example: destinationVC.dogName = dogName

    }

希望这有帮助!