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]
}