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

时间:2014-05-19 15:10:45

标签: ios objective-c

这不是错误拼写的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。 enter image description here

为什么prepareForSegue不会被调用?

注意,我正在为表格视图单元格使用自定义类,但我不明白为什么会影响任何内容。

更新

我在主表视图控制器的viewDidLoad中注册了自定义单元格

- (void)viewDidLoad
{
    [super viewDidLoad];
     [self.tableView registerClass:[MMTableViewCell class] forCellReuseIdentifier:@"Cell"];

3 个答案:

答案 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)

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

中使用此代码
[self performSegueWithIdentifier:@"societe" sender:indexPath];