检查View是否已删除?

时间:2011-10-19 00:21:04

标签: objective-c cocoa-touch model-view-controller uiview

我有一个UIView类,我目前通过在类[self removeFromSuperview]中使用来删除我的视图。希望这是正确的事情。

但是,现在从我的视图控制器(我将其添加到其中)我需要知道它何时删除了自己,这样我就可以在发生这种情况时调用方法。

任何帮助都将不胜感激,谢谢。

6 个答案:

答案 0 :(得分:1)

一般来说,视图不应该像删除自身那样。这是视图控制器的工作。

如果UIView子类可以生成需要更改视图层次结构的事件,我将为该视图定义delegate属性,当事件发生时,调用该委托上的方法。然后,当您的视图控制器添加视图时,它会将自己设置为委托并定义处理事件的相关方法。

答案 1 :(得分:0)

您可以使用委托回调将控制器设置为视图的委托。当您要删除视图时,请进行委托回调并在控制器中实现回调方法。

'removeFromSuperview'似乎总是向后退...... :(

答案 2 :(得分:0)

我假设您在进行某种操作后进行删除调用,例如按下按钮或其他内容。如果是这种情况,将按钮委托设置为视图控制器,而不是视图类,并在视图控制器的操作方法内,调用

[yourCustomView removeFromSuperview];

答案 3 :(得分:0)

最好的选择是让控制器删除视图

[self.view removeFromSuperview];

并且要知道视图是否已删除(或从未添加),您可以询问

if(![self.view superview]) {
    //no superview means not in the view hierarchy
}

答案 4 :(得分:0)

不确定您使用的是什么sdk - 但我使用的是iOS 5,我只是在superview中使用以下方法:

-(void)willRemoveSubview:(UIView *)subview{
    if([subview isEqual:someView]){
      //do stuff
    }
    //you could do some stuff here too
}

答案 5 :(得分:0)

如果你已经移除了 UIView

view.removeFromSuperview() 

您可以使用以下代码检查它是否存在:

if !(view.superview != nil) {
   //no superview means not in the view hierarchy
}