2016-04-03 70 views
0

我被困在Xcode中用Swift传递两个UITableViews之间的参数。如何在Swift中的两个UITableViewControllers之间传递数据?

我已经在这里看到了一些关于这个问题的问题,但即使我遵循了指示,仍然陷入困境。

我已经设置了我的故事板。我在这里遇到了问题,因为我发现的大多数指南都使用“显示”塞格,但出于某种原因,我只能使用“推”塞格。有没有办法,我可以拖动并创建一个“秀” Segue公司(也许是因为我通过在Windows和Mac不理解按Ctrl /命令键远程桌面使用Mac?)

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标识符,而无需链接故事板上的两个屏幕。所以,我不确定我的代码是否是错误的,如果我应该创建一个“显示”塞格(我真的是新的iOS编程,我不知道推和显示之间的实际区别UITableView的上下文),如果我应该以某种方式创建Segue标识符而不链接故事板上的屏幕,等等......我真的被卡住了,没有想法。

感谢任何帮助。谢谢。

+0

据我所知,“显示”是他们称之为“Push”的部分。所以,你很好。 –

+2

'prepareForSegue'在'didSelectRowAtIndexPath'之前被调用。如果你想在'prepareForSegue'中选择索引,那么通过'tableView.indexPathForSelectedRow.row'获取它。 – dan

+1

我认为这里发生的事情是因为当你选择一个单元格时它将首先调用从单元格到单元格的segue prepareforsegue然后是selectedIndex = indexPath.row。因此,不要将segue与单元格链接,而要将VC与VC链接起来,并在didselect中调用performSegueWithIdentifier。 –

回答

2

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

而不是存储selectedIndex,您可以使用UITableViewindexPathForSelectedRow属性从表视图中获取它。它返回一个可选项,所以一定要正确解开它。

+0

这里的另一篇文章提供了一些关于传递数据视图控制器的例子,这些例子可能也有帮助:http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers?rq=1 – xdeleon

0

尝试添什么上面说的,改变你的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 

    } 

希望这有助于!

相关问题