我现在正在构建一个基于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.谢谢。
答案 0 :(得分:2)
如果您将segue从一个视图控制器挂钩到另一个视图控制器,而不是直接从UI元素挂钩,则可以使用performSegue:withIdentifier:
在您需要执行时准确执行segue。
因此,在表视图进入其他视图的情况下,在didSelectRowAtIndexPath:
方法中,您将从所选行中获取一些数据,以准备发送到目标视图控制器。 / p>
然后在结束时,您拨打performSegue:withIdentifer:
。
作为segue过程的一部分,调用prepareForSegue:sender:
(在这种情况下,在原始表视图控制器上调用)。在此方法中,您具有对原始视图控制器(通过self
)和目标视图控制器(通过[segue destinationViewController]
)的引用,因此在此方法中您可以从{{1}传递数据} self
。
基本上,您应该使用[segue destinationViewController]
来处理任何行选择逻辑并准备要传递的数据(可能将其保存到didSelectRowAtIndexPath:
),然后在@property
中,执行传递数据所需的所有逻辑。