我已经花了几个小时,我无法弄清楚这一点。我有一个在此处启动的详细视图控制器(UITableView):
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
EventLocationDetailController *newDetailViewController = [[EventLocationDetailController alloc] initWithNibName:@"EventLocationDetailController" bundle:nil];
self.eventDetailController = newDetailViewController;
[self.navigationController pushViewController:self.eventDetailController animated:YES];
[newDetailViewController release];
}
在详细视图控制器中有一个按钮方法,它调用下面的方法来显示一个滑入滑出动画来确认用户的选择:
-(void)confirmLastActionWithMessage:(NSString *)message {
ConfirmActionViewController *newConfirmActionViewController = [[ConfirmActionViewController alloc] initWithNibName:@"ConfirmActionViewController" bundle:nil];
self.confirmActionViewController = newConfirmActionViewController;
[newConfirmActionViewController release];
[[self.view superview] addSubview:self.confirmActionViewController.view];
}
ConfirmActionViewController 调用的协议方法,表示动画完成。
-(void)didFinishConfirmDisplay:(UIView *)viewToRemoveFromSuperview {
[viewToRemoveFromSuperview removeFromSuperview];
}
这在我第一次按下按钮时效果很好。如果我弹出细节控制器并将其推回堆栈并再次按下按钮,则不会发生任何事情,并且此后每次调用该方法时,细节控制器的超级视图都为零。细节视图的方法中的superview不是nil viewWillAppear
,只有当它到达confirmLastActionWithMessage方法时。两者之间不会发生其他用户交互。如何找回超级视图?我有一个没有动画的类似代码。
我还注意到,从堆栈中弹出时,详细视图控制器没有调用 dealloc。不确定问题出在哪里。
谢谢。
编辑 1
好的。我用这个替换了 addSubview 行:
[self.view insertSubview:self.confirmActionViewController.view atIndex:0];
并且动画视图出现在其中一个表格单元格的下方。表格单元之一可以窃取超级视图吗?