我的根控制器是一个带有静态单元格和导航控制器的 TableViewController。根据选择的单元格,我想推送另一个 ViewController(带有嵌入式 TableView),它将相应地更改其配置(是否启用按钮,来自 db 表或 NSArray 的单元格数据等)。选择一些“控制器 A”单元格将调用“控制器 B”或“控制器 C”并传递一些数据。
我正在尝试的代码如下所示:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
switch (indexPath.row) {
case 0:
{
[self performSegueWithIdentifier:@"segueToType" sender:self];
}
break;
case 1:
{
[self performSegueWithIdentifier:@"segueToType" sender:self];
}
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"segueToType"])
{
NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
NSInteger rowNumber = selectedIndexPath.row;
switch (rowNumber) {
case 0:
{
TypeSelectController *selCon = [segue destinationViewController];
selCon.myPet = self.myPet;
selCon.sel = @"tipo";
selCon.delegate = self;
}
break;
case 1:
{
TypeSelectController *selCon = [segue destinationViewController];
selCon.myPet = self.myPet;
selCon.sel = @"razza";
selCon.delegate = self;
}
break;
default:
break;
}
}
}
例如,在这种情况下,我只调用“控制器 B”,但根据“控制器 A”的选定单元格,它以不同的方式配置自身(取决于“selCon.sel”字符串)。
在“控制器 B”中,我有这样的代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([sel isEqualToString:@"tipo"]) {
NSString *itemToPassBack = [tipi objectAtIndex:indexPath.row];
[self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack ofType:@"tipo"];
[self.navigationController popViewControllerAnimated:YES];
} else if ([sel isEqualToString:@"razza"]) {
NSString *itemToPassBack = [razze objectAtIndex:indexPath.row];
[self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack ofType:@"razza"];
[self.navigationController popViewControllerAnimated:YES];
}
}
同样,根据字符串“sel”值,我将不同的数据返回到“控制器 A”。
当我选择控制器 A 中的第一个单元格时,我正确地获得了控制器 B 场景。然后我选择一个单元格并返回正确数据的控制器 A。现在,如果我尝试在控制器 A 中选择第二个单元格并在控制器 B 中选择一个单元格,则导航不会按我的意愿响应并且我得到控制器 C 场景,然后是控制器 A 和以下错误:
嵌套推送动画可能导致导航栏损坏
在意外状态下完成导航转换。导航栏子视图树可能会损坏。
开始/结束外观转换的不平衡调用。
我究竟做错了什么?