我试图用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标识符而不连接故事板上的屏幕,等等......我真的被困在想法中。
感谢任何帮助。感谢。
答案 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
}
希望这有帮助!