2010-06-19 87 views
8

看来,UIView并没有像“didRemoveFromSuperview”或“willRemoveFromSuperview”这样的方法。那么,如何在UIView从它的超级视图中删除时监听事件?我应该使用KVO?提前致谢!如何在UIView从它的超级视图中分离时得到通知?

+0

你知道何时删除视图,因为你在代码中执行它?只需将代码连接到此处或辅助函数即可。 – Eiko 2010-06-19 08:55:07

回答

4

你可以继承你的UIView,并从- (void)removeFromSuperview方法发布通知。

+12

我找到了.Api文档说: willMoveToSuperview: 通知接收者其超级视图即将更改为指定的超级视图(可能为零)。 ----------------------------------------- 当这个方法被调用并且该参数为零,视图正在被删除 – Jagie 2010-06-19 10:15:33

19

这个主题是很老,但我发现了一个办法做到这一点。自从谷歌搜索是不够的帮助,这(从UIView的的文档拍摄)

观察查看相关的变化

- didAddSubview:

- willRemoveSubview:

- willMoveToSuperview:

- didMoveToSuperview

- willMoveToWindow:

- didMoveToWindow

13

这个工程(上iOS8上测试):

-(void) didMoveToWindow { 
    [super didMoveToWindow]; // (does nothing by default) 
    if (self.window == nil) { 
     // YOUR CODE FOR WHEN UIVIEW IS REMOVED 
    } 
} 

According to the UIView docs

的这种默认实现方法做什么都没有。当窗口改变时,子类可以覆盖它以执行其他操作。

的窗口属性可能是nil ... 当接收器刚刚被从它的父或除去这发生在接收器刚刚被添加到未附加到窗口一个上海华。

0
- (void) willMoveToSuperview: (UIView *) newSuperview{ 
    if(newSuperview == nil){ 
     // UIView was removed from superview 
    } else { 
     // UIView was added to superview 
    } 
} 
相关问题