这不是错误拼写的segue标识符或类似的问题。当我点击tableViewController中的单元格时,方法prepareForSegue
实际上不会被调用。如果我点击单元格,只有当我添加新单元格时,控制语句之前的日志语句才不会记录。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSLog(@"prepare for segue"); //not getting logged if I tap on an existing cell
if ([[segue identifier] isEqualToString:@"AddTopic"]) {
//
works fine to add a new cell
}
if ([[segue identifier] isEqualToString:@"ShowDetail"]){
NSLog(@"in segue to display edit");
MMDisplayEditViewController *devc = (MMDisplayEditViewController *)[segue destinationViewController];
您可以在下图中看到,从表格视图控制器中的单元格到显示编辑视图控制器设置了推送segue。
为什么prepareForSegue
不会被调用?
注意,我正在为表格视图单元格使用自定义类,但我不明白为什么会影响任何内容。
更新
我在主表视图控制器的viewDidLoad中注册了自定义单元格
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView registerClass:[MMTableViewCell class] forCellReuseIdentifier:@"Cell"];
答案 0 :(得分:2)
问题是由在viewDidLoad中注册单元格类引起的,
[self.tableView registerClass:[MMTableViewCell class] forCellReuseIdentifier:@"Cell"];
您可以从故事板中的单元格设置segue,但是通过注册您的类,表视图从类定义中获取其单元格,而不是从故事板中附加了segue的单元格。要解决此问题,只需删除该行。
这方面的文档有点不完整。如果单元格完全由代码构成,则只应注册该类。您使用自定义单元格的事实并未改变这一事实 - 如果故事板中有单元格,并且您将其设置为自定义类,则不应注册任何内容。
答案 1 :(得分:1)
不是将segue从单元格链接到下一个视图控制器,而是从视图控制器链接到下一个视图控制器。给该segue一个标识符并实现委托方法tableView:didSelectRowAtIndexPath
,如下所示:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self performSegueWithIdentifier:@"identifier" sender:indexPath];
}
答案 2 :(得分:-1)
[self performSegueWithIdentifier:@"societe" sender:indexPath];