【问题标题】:Attach two view controllers to a single prototype cell将两个视图控制器附加到单个原型单元
【发布时间】:2015-10-29 07:11:31
【问题描述】:
考虑以下场景
我有一个原型单元格,基于NSFetchedResultsController,table view cells 的数量将出现在table view controller 中,例如单元格 A、B、C、D。
基于tableviewcell 的内容,我需要将segue 推送到不同的view controllers,例如当用户点击cells A、B、C、D 到E、F、G、H 视图控制器时分别。
设计这个场景的标准方法是什么?
【问题讨论】:
标签:
ios
objective-c
uitableview
storyboard
【解决方案1】:
与大多数复杂场景一样,我认为没有一种普遍接受的标准解决方案。一种(我认为)实现这种行为的干净方法可能如下所示:
在 Storyboard 中将目标视图控制器和充当表视图代理的视图控制器之间的 segue 设置为 manual,并为它们提供适当的标识符(例如“segueE”、“segueF”、“segueG”、 “segueH”)。然后,在拥有您的表格视图的视图控制器中,创建一个封装单元格内容和目标视图控制器之间映射的方法,并实现 didSelectRowAtIndexPath: 委托方法,如下所示:
// Returns "segueE", "segueF", "segueG" or "segueH"
- (NSString *) segueIdentifierForIndexPath:(NSIndexPath *)indexPath {
// your mapping logic
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *segueIdentifier = [self segueIdentifierForIndexPath: indexPath];
[self performSegueWithIdentifier:segueIdentifier sender:self];
}
当然,segueIdentifierForIndexPath: 中究竟发生了什么取决于您在表格视图中显示的数据的性质。