0

我已经花了几个小时,我无法弄清楚这一点。我有一个在此处启动的详细视图控制器(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];

并且动画视图出现在其中一个表格单元格的下方。表格单元之一可以窃取超级视图吗?

4

1 回答 1

1

好吧,我真的不明白为什么要将子视图添加到父视图。为什么不将它添加到 self.view

我可能无法解释为什么没有超级视图,但尝试将控制器视图添加到 self.view 或

[[[[UIApplication sharedApplication] delegate] window] addSubview:yourview];

这会将视图呈现在所有内容之上。

于 2012-07-03T17:03:43.810 回答