对于什么用例,可以选择tableView:didSelectRowAtIndexPath:而不是prepareForSegue:sender:?

时间:2013-04-27 22:38:34

标签: ios cocoa-touch

我了解tableVIew:didSelectRowAtIndexPath:prepareForSegue:sender:之间的差异。此外,两者都可用于在点击单元格时显示新视图。是否存在可能选择tableView:didSelectRowAtIndexPath:而不是prepareForSegue:sender:的用例?如果是这样,那些用例是什么?

4 个答案:

答案 0 :(得分:5)

历史上tableView:didSelectRowAtIndexPath:从一开始就在iOS中可用; prepareForSegue:最近才提供整个StoryBoard架构。因此,这些天,prepareForSegue:是首选。

请注意,实际的segue函数是prepareForSegue:sender:。当UITableViewCell启动segue时,sender将成为所选单元格。因此,您可以像在tableView:didSelectRowAtIndexPath:中一样获得所有可用内容。

此外,在转换到另一个视图控制器时使用segues。如果您的应用程序没有单元格选择过渡到视图控制器,那么您不能使用segue。例如,如果您的应用中的单元格选择将使用动画或直接使用视图执行某些操作,则可以使用tableView:didSelectRowAtIndexPath:

答案 1 :(得分:1)

我使用'旧方式'。为什么?因为我已经习惯了,这对我来说很有意义。它从一开始就可用。

另一方面,

prepareForSeque:最近被添加。大多数过去使用didSelectRowAtIndexPath的人都习惯了它,它可以工作,而且,如果它没有破坏就不要修复它!

答案 2 :(得分:1)

如果您使用的行是动态的UITableView,您将需要在tableVIew中调用您的segue:didSelectRowAtIndexPath

例如,如果您查看我的iPad应用程序的屏幕截图,我会从静态单元格中拖出每个segue。

https://itunes.apple.com/ml/app/h4-spanish-lite/id388918463?mt=8#

不幸的是,现在我想要法语和中文应用程序。我目前没有法语的共轭语,也不适用于中文。此外,有些游戏不适用于中文。所以,现在我需要动态创建我的表。我可以创建单独的故事板,但这似乎很麻烦。

答案 3 :(得分:0)

使用tableVIew:didSelectRowAtIndexPath,您将获得所选项目。当您知道所选项目时,您可以致电prepareForSegue:来设置使用故事板设计的下一个UIViewController,例如初始化一些属性。

编辑:如果您使用自iOS 5以来可用的Storyboard,则只需使用prepareForSegue: