prepareForSegue在注册自定义单元格时不会被调用

这不是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"]; 

问题是由viewDidLoad中的单元格类注册引起的,

 [self.tableView registerClass:[MMTableViewCell class] forCellReuseIdentifier:@"Cell"]; 

您可以从故事板中的单元格设置segue,但是通过注册您的类,表视图从类定义中获取其单元格,而不是从故事板中附加了segue的单元格。 要解决此问题,只需删除该行。

这方面的文档有些不完整。 如果单元格完全由代码构成,则只应注册该类。 您使用自定义单元格的事实并未改变这一事实 – 如果故事板中有单元格,并且您将其设置为自定义类,则不应注册任何内容。

而不是将segue从单元格链接到下一个视图控制器,而是从视图控制器链接到下一个视图控制器。 给segue一个标识符并实现委托方法tableView:didSelectRowAtIndexPath如下所示:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self performSegueWithIdentifier:@"identifier" sender:indexPath]; } 

如果是,请在didSelectRowAtIndexPath中使用此代码,在故事板中的segue中添加此名称“ShowDetail”

 [self performSegueWithIdentifier:@"societe" sender:indexPath];