只有在添加第三个segue时,才会在didSelectRowAtIndexPath之前调用prepareForSegue

时间:2013-08-10 19:42:11

标签: ios interface-builder storyboard segue didselectrowatindexpath

我有3个segues到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;
    }
}

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

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

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

我注意到现在还准备了两次调试,首先调用prepareforseque,然后再调用,然后再次准备。

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

2 个答案:

答案 0 :(得分:78)

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

segue between view controllers

您现在可以选择这个新的segue,转到“属性检查器”(选项 + 命令 + 4 ),然后提供故事板标识符,当您致电performSegueWithIdentifier时,您可以在代码中引用该标识符。

答案 1 :(得分:4)

原因是您无法从tableview单元格拖动到多个视图。正如@rdelmar所说,这是错误的。您应该从目标拖动到源视图,然后按照我上面的方式手动处理。

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