31

我对 3 种不同的观点有 3 种不同的看法。2 执行没有问题,当创建第三个时,问题就出现了。

我有以下 didSelectRowAtIndexPath 方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSLog(@" ----------  did select row");

    if(indexPath.section == 0){
        if(indexPath.row == [self.data count]-1){
            //prior to adding this, everything works
            [self performSegueWithIdentifier:@"MoreComments" sender:self];
        }else{
            [self performSegueWithIdentifier:@"FriendView" sender:friend];
        }
    }else if(indexPath.section == 1){
        if(indexPath.row == [self.data2 count]-1){
            [self performSegueWithIdentifier:@"MorePosts" sender:self];
        }else{
            [self performSegueWithIdentifier:@"FriendView" sender:friend];
        }
    }
}

我有以下 prepareForSeque 方法:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([segue.identifier isEqualToString:@"MorePosts"]){
        MorePostsViewController *mfamvc = segue.destinationViewController;
        mfamvc.data = self.data;
    }else if([segue.identifier isEqualToString:@"FriendView"]){
        FriendViewController *fvc = segue.destinationViewController;
        fvc.friend = friend;
    }else if([segue.identifier isEqualToString:@"MoreComments"]){
          MoreCommentsViewController *mcvc = segue.destinationViewController;
          mcvc.data = self.data2;
    }
}

在控制从我的单元格拖动到最后一个视图之前,我可以看到我的程序点击了 didselectrow,然后是 prepareforseque。这使得所有视图导航工作完美。

一旦我控制从我的单元格拖动到 MoreCommentsViewController 我开始看到错误:

嵌套推送动画可能会导致导航栏损坏 在意外状态下完成导航转换。导航栏子视图树可能会损坏。

我注意到现在也调用了 prepareforseque 两次,首先调用 prepareforseque,然后是 didselectrow,然后再次调用 prepareforsegue。

有条件地去这些不同的观点我做错了什么?

4

2 回答 2

83

您应该使用其中一个didSelectRowAtIndexPath或从单元格中选择,但不能同时使用两者。如果您希望didSelectRowAtIndexPath调用 segues,这些 segues 不应该从单元格到下一个场景,而是来自场景上方栏中的视图控制器图标:

视图控制器之间的segue

您现在可以选择这个新的 segue,转到“属性检查器”(option++ command4,并提供一个故事板标识符,您可以在调用时在代码中引用它performSegueWithIdentifier

于 2013-08-10T20:39:47.983 回答
4

原因是您不能从一个表格视图单元格拖动到多个视图。正如@rdelmar 提到的,这是错误的。您应该从目的地拖动到源视图,然后按照我上面的方式手动处理。

也可以在这里找到: Conditional segue on tap on UITableViewCell

于 2013-08-10T20:41:26.773 回答