iPhone,是否需要IF for Dismissmodalviewcontrollerimated ELSE从SuperView中移除?
我需要将此添加到我的“解雇”按钮:-iPhone,是否需要IF for Dismissmodalviewcontrollerimated ELSE从SuperView中移除?,iphone,xcode,Iphone,Xcode,我需要将此添加到我的“解雇”按钮:- [self dismissModalViewControllerAnimated:YES]; [self release]; 否则 我想 if( self.navigationController.modalViewController ) { 正常情况下,如果出现“解除”按钮,我会在控制器中调用表示模态控制器的方法(使用委托),而不是尝试从内部解除模态视图控制器。虽然我不太明白你想做什么,但那种[自我释放]看起来很糟糕。我认为您永远不会希望像那样释放s
[self dismissModalViewControllerAnimated:YES];
[self release];
否则
我想
if( self.navigationController.modalViewController ) {
正常情况下,如果出现“解除”按钮,我会在控制器中调用表示模态控制器的方法(使用委托),而不是尝试从内部解除模态视图控制器。虽然我不太明白你想做什么,但那种[自我释放]看起来很糟糕。我认为您永远不会希望像那样释放self。通常对于“解除”按钮,我会调用控制器中呈现模态控制器的方法(使用委托),而不是尝试从内部解除模态视图控制器。虽然我不太明白你想做什么,但那种[自我释放]看起来很糟糕。我认为你永远都不想那样释放自我。在你的modal viewcontroller中试试这个:
- (IBAction)close:(id)sender {
[self.parentViewController dismissModalViewControllerAnimated:YES];
}
然后只需将按钮的操作连接到该方法。在您的modal viewcontroller中尝试以下操作:
- (IBAction)close:(id)sender {
[self.parentViewController dismissModalViewControllerAnimated:YES];
}
然后将按钮的操作连接到该方法。以下几点:
1) 你不应该在物体中释放自己。如果要显示模态视图控制器,则应在此处执行释放,因为视图控制器现在将由视图控制器的.modalViewController属性保留:
(在家长中):
2) 父级将其子模式视图控制器存储在.modalViewController中。在这种情况下,子级将设置其.parentViewController属性。如果视图已添加为子视图,则将设置其.superview属性。然而,这些并不是相互排斥的,所以要小心。一般来说,UIViewController旨在承载全屏视图,如果要将视图添加为子视图,则应自问该视图是否应仅为UIView子类,并将逻辑移到父视图控制器中
也就是说,我想您可以检查您的案例(假设您不同时显示模态视图控制器和添加为子视图):
在后一种superview情况下,视图控制器仍将挂起,因此您需要通过委托方法或其他方式让另一个视图控制器知道,以释放您。在第一种情况下,如果您已经按照上面所述释放了显示的视图控制器,则当父视图控制器将其.modalViewController属性设置为nil时,它将自动释放。有几件事:
1) 你不应该在物体中释放自己。如果要显示模态视图控制器,则应在此处执行释放,因为视图控制器现在将由视图控制器的.modalViewController属性保留:
(在家长中):
2) 父级将其子模式视图控制器存储在.modalViewController中。在这种情况下,子级将设置其.parentViewController属性。如果视图已添加为子视图,则将设置其.superview属性。然而,这些并不是相互排斥的,所以要小心。一般来说,UIViewController旨在承载全屏视图,如果要将视图添加为子视图,则应自问该视图是否应仅为UIView子类,并将逻辑移到父视图控制器中
也就是说,我想您可以检查您的案例(假设您不同时显示模态视图控制器和添加为子视图):
在后一种superview情况下,视图控制器仍将挂起,因此您需要通过委托方法或其他方式让另一个视图控制器知道,以释放您。在第一种情况下,如果您已经像我上面所描述的那样释放了显示的视图控制器,那么当父视图控制器将其.modalViewController属性设置为nil时,它将自动释放。No这不起作用,因为我使用[window addSubview:lvc.view]调用视图;我需要一个IF和ELSE,因为我以两种不同的方式调用视图,但这不起作用,因为我使用[window addSubview:lvc.view]调用视图;我需要一个IF和ELSE,因为我以两种不同的方式调用视图。我重复使用同一个视图,但我必须以不同的方式调用它,将其添加为子视图并以模式推送。我想我明白你的意思了。也许可以创建自己的ivar,称为BOOL subviewPresentedModally,让它由显示视图的任何对象设置,然后使用“discouse”方法if()对其进行设置。基本上就是创建你自己的变量版本。我重复使用同一个视图,但我必须以不同的方式调用它,将它添加为子视图并以模式推送。我想我明白你的意思了。也许可以创建自己的ivar,称为BOOL subviewPresentedModally,让它由显示视图的任何对象设置,然后使用“discouse”方法if()对其进行设置。基本上,只需创建您自己的变量版本,您将尝试启用if()。
UIViewController *someViewController = [[UIViewController alloc] init];
[self presentModalViewController:someViewController animated:YES];
[someViewController release];
if (self.parentViewController) {
[self dismissModalViewControllerAnimated:YES];
} else if (self.view.superview) {
[self.view removeFromSuperview]
}