如何在UIView与superView分离时收到通知?

时间:2010-06-19 08:41:34

标签: ios iphone uiview key-value-observing

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

4 个答案:

答案 0 :(得分:20)

这个主题很老了,但我找到了一种方法。由于谷歌搜索不够有用,这里(取自UIView的文档)

  

观察与视图相关的更改

     

- didAddSubview:

     

- willRemoveSubview:

     

- willMoveToSuperview:

     

- didMoveToSuperview

     

- willMoveToWindow:

     

- didMoveToWindow

答案 1 :(得分:18)

这适用(在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

  

此方法的默认实现不执行任何操作。子窗口可以覆盖它,以便在窗口更改时执行其他操作。

     

窗口属性可能是 ... 当接收器刚刚从其超级视图中删除时或者刚刚将接收器添加到超级视图时没有附在窗户上。

答案 2 :(得分:5)

您可以将UIView子类化并从其- (void)removeFromSuperview方法发布通知。

答案 3 :(得分:3)

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