ios7 - 警告:在演示文稿正在进行时尝试在UINavigationController上呈现UINavigationController

时间:2014-01-27 16:48:41

标签: ios ios7 segue

在didSelectRowAtIndexPath中选择segue时,我收到了上述警告。这发生在iPad上。 iPhone给出了一个不同的警告,我会看到修复此问题是否也能解决另一个问题。

我在方法中有两个segue。第一部作品没有发生意外。第二个发出警告。我环顾网络,检查了其他人的解决方案。纳达,所以我在这里张贴..

以下是代码:(我愿意接受更好的方式来写这个!)

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //NSLog(@"%s", __FUNCTION__);

    if ((indexPath.section == 0) || (indexPath.section == 1) || (indexPath.section == 2)) return;
    if (indexPath.section > 4) return;

    //Images THIS WORKS OK
    if (indexPath.section == 3 && indexPath.row == 0) { 
        viewController1 = [[ViewController1 alloc] init];
        [self performSegueWithIdentifier:@"detailToV1" sender:self];
        [self.tableView reloadData];
    }

    if (indexPath.section == 3 && indexPath.row == 1) { // THIS REDULTS IN A WARNING
        viewController2 = [[ViewController2 alloc] init];
        [self performSegueWithIdentifier:@"detailToV2" sender:nil];
    }

//Notes THIS WORKS OK BUT I HAD TO USE A NIB TO AVOID THE WARNING
    if (indexPath.section == 4 && indexPath.row == 0) { 

        viewController3 = [[ViewController3 alloc] init];
        [[self navigationController] pushViewController:viewController3 animated:YES];
        [self.tableView reloadData];

    }
}

1 个答案:

答案 0 :(得分:1)

ViewController3的父类是什么?这听起来像是一个导航控制器,我的理解是你无法从另一个导航控制器中推出导航控制器。如果你想做类似的事情,你需要从第一个导航控制器出示新的导航控制器。

编辑:

基本上,如果您使用导航视图控制器来推送另一个视图控制器,那么新的视图控制器将保持在导航视图控制器的“内部”。 (导航VC具有同时管理多个VC的逻辑。)我相信有一个规则,导航VC不能在另一个导航VC“内部”。因此,您需要简单地依靠orindary VC演示,以便新的导航VC不在原始导航VC的“内部”。它本身就在它之上,而不是在它内部。

代码示例:

[self.navigationController presentViewController:ViewController3 animated:YES completion:nil]