在第二次推出View Controller后,Superview是Nil

时间:2012-07-03 16:39:25

标签: objective-c ios pushviewcontroller superview

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

并且动画视图出现在其中一个表格单元格下方。其中一个表格单元是否会窃取超级视图?

1 个答案:

答案 0 :(得分:1)

我真的不明白你为什么要把子视图添加到superview中。为什么不将它添加到self.view

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

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

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