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

Jag*_*gie 14 iphone key-value-observing uiview ios

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

小智 21

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

观察与视图相关的更改

- didAddSubview:

- willRemoveSubview:

- willMoveToSuperview:

- didMoveToSuperview

- willMoveToWindow:

- didMoveToWindow


Mar*_*per 21

这有效(在iOS8上测试):

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

根据UIView文件:

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

窗口属性可能是nil ... 当接收器刚刚从其超级视图中移除时或者刚刚将接收器添加到未附加到窗口的超级视图时,会发生这种情况.


小智 8

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


bee*_*fon 5

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

  • 我发现.Api doc说:willMoveToSuperview:通知接收者其superview即将更改为指定的superview(可能为nil).-----------------------------------------调用此方法且参数为没有,视图正在删除 (13认同)