我花了好几个小时,我无法弄清楚这一点。我有一个详细视图控制器(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。只有当它到达confirmLastActionWithMessage方法时,Superview在详细视图的viewWillAppear
方法中才为零。两者之间不会发生其他用户交互。如何获得超级视图?我有一个类似的代码,没有动画。
我还注意到详细视图控制器在弹出堆栈时没有调用dealloc。不确定问题出在哪里。
感谢。
编辑1
行。我用这个替换了addSubview行:
[self.view insertSubview:self.confirmActionViewController.view atIndex:0];
并且动画视图出现在其中一个表格单元格下方。其中一个表格单元是否会窃取超级视图?
答案 0 :(得分:1)
我真的不明白你为什么要把子视图添加到superview中。为什么不将它添加到self.view
我可能无法解释为什么没有superview但是尝试将控制器视图添加到self.view或
[[[[UIApplication sharedApplication] delegate] window] addSubview:yourview];
这将使视图呈现在所有内容之上。