【发布时间】:2012-07-03 16:39:25
【问题描述】:
我已经花了几个小时,我无法弄清楚这一点。我有一个在此处启动的详细视图控制器 (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];
}
这在我第一次按下按钮时效果很好。如果我弹出细节控制器并将其推回堆栈并再次按下按钮,则不会发生任何事情,并且此后每次调用该方法时,细节控制器的超级视图都为零。细节视图的viewWillAppear 方法中的Superview 不为零,只有当它到达confirmLastActionWithMessage 方法时。两者之间不会发生其他用户交互。如何找回超级视图?我有一个类似的代码,没有动画。
我还注意到,从堆栈弹出时,详细视图控制器没有调用 dealloc。不知道问题出在哪里。
谢谢。
编辑 1
好的。我用这个替换了 addSubview 行:
[self.view insertSubview:self.confirmActionViewController.view atIndex:0];
并且动画视图出现在其中一个表格单元格的下方。其中一个表格单元格是否可以窃取超级视图?
【问题讨论】:
-
您的房产是什么样的?具体来说,您是否在属性中添加了自定义逻辑?
-
@property (nonatomic, 保留) ConfirmActionViewController *confirmActionViewController;
-
实现,而不是声明。你有
@synthesize或别的什么吗? -
是的,我有@synthesize confirmActionViewController;
-
我认为你第一次就做对了。您不想将视图添加到 UITableView(假设要添加它的视图是 UITableView)。
标签: objective-c ios pushviewcontroller superview