在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];
}
}
答案 0 :(得分:1)
ViewController3的父类是什么?这听起来像是一个导航控制器,我的理解是你无法从另一个导航控制器中推出导航控制器。如果你想做类似的事情,你需要从第一个导航控制器出示新的导航控制器。
编辑:
基本上,如果您使用导航视图控制器来推送另一个视图控制器,那么新的视图控制器将保持在导航视图控制器的“内部”。 (导航VC具有同时管理多个VC的逻辑。)我相信有一个规则,导航VC不能在另一个导航VC“内部”。因此,您需要简单地依靠orindary VC演示,以便新的导航VC不在原始导航VC的“内部”。它本身就在它之上,而不是在它内部。
代码示例:
[self.navigationController presentViewController:ViewController3 animated:YES completion:nil]