使用prepareForSegue移动到另一个视图控制器:sender:或tableView:didSelectedRowAtIndexPath:

时间:2014-01-25 18:44:56

标签: ios objective-c core-data uitableview

我现在正在构建一个基于Core Data的iOS应用程序,我希望用户在UITableViewController中点击一个基于Core Data和NSFetchedResultsController的单元格,让他移动到另一个视图控制器,他可以看到详细的项目。

在iOS Master-Detail模板应用程序中,当用户点击任何单元格时,视图控制器将使用storyboard segue移动到详细视图控制器以显示详细项目。

但是,我不知道为什么这种方法prepareForSegue: sender:可以响应用户的点击并被调用以移动到详细视图。如果你正在使用UITableView,那么还有一个名为tableView: didSelecteRowAtIndexPath:的委托方法,它应该对用户的点击操作作出准确的反应。

实际上,当我尝试编写后一种方法以便移动到详细视图控制器时,转换失败,因为我显然同时调用了这两种方法。

所以我的问题是,1)prepareForSegue: sender:方法如何响应用户的点击操作并相应地处理其内部实现,2)如果我可以同时使用prepareForSegue: sender:和{{1}我应该使用哪一个?

无论采取何种方式,我都希望使用NSFetchedResultsController从持久存储中获取抽头单元的详细数据,并将其显示在详细视图控制器中。如果是这种情况,那么我应该在哪里编写获取的代码(在上面的任一方法中,或者在详细视图控制器的tableView: didSelecteRowAtIndexPath:方法中)?

我使用iOS 7和Xcode 5.谢谢。

1 个答案:

答案 0 :(得分:2)

如果您将segue从一个视图控制器挂钩到另一个视图控制器,而不是直接从UI元素挂钩,则可以使用performSegue:withIdentifier:在您需要执行时准确执行segue。

因此,在表视图进入其他视图的情况下,在didSelectRowAtIndexPath:方法中,您将从所选行中获取一些数据,以准备发送到目标视图控制器。 / p>

然后在结束时,您拨打performSegue:withIdentifer:

作为segue过程的一部分,调用prepareForSegue:sender:(在这种情况下,在原始表视图控制器上调用)。在此方法中,您具有对原始视图控制器(通过self)和目标视图控制器(通过[segue destinationViewController])的引用,因此在此方法中您可以从{{1}传递数据} self

基本上,您应该使用[segue destinationViewController]来处理任何行选择逻辑并准备要传递的数据(可能将其保存到didSelectRowAtIndexPath:),然后在@property中,执行传递数据所需的所有逻辑。