20

UIView 似乎没有“ didRemoveFromSuperview”或“ willRemoveFromSuperview”之类的方法。那么,当 UIView 从其 superView 中删除时如何监听事件?我应该使用 KVO 吗?提前致谢!

4

4 回答 4

28

这个话题很老了,但我找到了一种方法。由于谷歌搜索没有足够的帮助,这里是(取自 UIView 的文档)

观察与视图相关的变化

– didAddSubview:

– willRemoveSubview:

– willMoveToSuperview:

– didMoveToSuperview

– willMoveToWindow:

– didMoveToWindow

于 2013-02-01T11:29:12.157 回答
28

这有效(在 iOS8 上测试):

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

根据UIView文档

此方法的默认实现什么也不做。子类可以覆盖它以在窗口更改时执行其他操作。

window 属性可能为 nil ...当接收器刚刚从其父视图中移除或接收器刚刚添加到未附加到窗口的父视图时,就会发生这种情况。

于 2015-06-18T22:41:38.767 回答
8
- (void) willMoveToSuperview: (UIView *) newSuperview{
    if(newSuperview == nil){
        // UIView was removed from superview
    } else {
        // UIView was added to superview
    }
}
于 2016-07-11T14:45:47.853 回答
6

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

于 2010-06-19T08:42:48.417 回答