我理解tableVIew:didSelectRowAtIndexPath:
和prepareForSegue:sender:
之间的区别。此外,两者都可以用于在点击单元格时显示新视图。是否有可能选择tableView:didSelectRowAtIndexPath:
而不是prepareForSegue:sender:
的用例?如果是,那些用例是什么?
tableView:didSelectRowAtIndexPath:
从一开始就出现在iOS上;prepareForSegue:
是最近才发布的,包含了整个StoryBoard架构。因此,现在首选prepareForSegue:
。
注意实际的segue函数是prepareForSegue:sender:
。当UITableViewCell
启动segue时,sender
将成为被选中的单元格。因此,您可以像在tableView:didSelectRowAtIndexPath:
中那样获得所有可用的内容。
同样,segue在转换到另一个视图控制器时使用。如果你的应用没有单元格选择过渡到视图控制器,那么你就不能使用segue。例如,如果一个单元格选择,在你的应用程序中,要做一些动画或直接与视图,你会使用tableView:didSelectRowAtIndexPath:
我用的是"老办法"。为什么?因为我习惯了,这对我来说很有意义。它从一开始就可用。
另一方面, prepareForSeque:
是最近添加的。大多数过去使用过didSelectRowAtIndexPath
的人都习惯了它,它可以工作,而且,如果没有坏,就不要修复它!
如果你使用的是UITableView,其中的行是动态的,你会想在tableVIew:didSelectRowAtIndexPath中调用你的segue
如果你看一下我的iPad应用的截图,例如,我从静态单元格中拖出每个segue
https://itunes.apple.com/ml/app/h4-spanish-lite/id388918463?mt=8
不幸的是,现在我想有法语和中文的应用程序。我现在没有法语的共轭器,也不适用于汉语。此外,有些游戏无法在中文环境下运行。现在我需要动态创建表。我可以创建单独的故事板,但这似乎很麻烦。
使用tableVIew:didSelectRowAtIndexPath
,您将获得所选项目。当你知道被选中的项目时,你可以调用prepareForSegue:
来设置下一个UIViewController
,通过使用故事板设计,例如初始化一些属性。
编辑:如果你使用的是Storyboard,你只需要使用prepareForSegue:
就可以了,从iOS 5开始