Ios 当UIView从其superView分离时,如何得到通知?

Ios 当UIView从其superView分离时,如何得到通知?,ios,iphone,uiview,key-value-observing,Ios,Iphone,Uiview,Key Value Observing,UIView似乎没有类似“didRemoveFromSuperview”或“willRemoveFromSuperview”的方法。那么,当UIView从其superView中删除时,如何侦听事件?我应该使用KVO吗?提前谢谢 你可以将你的UIView子类化,并通过它的-(void)removeFromSuperview方法发布通知。这个主题已经很老了,但我找到了一种方法。由于谷歌搜索没有足够的帮助,这里是(取自UIView的文档) 观察与视图相关的更改 –didAddSubview: –wil

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

你可以将你的UIView子类化,并通过它的
-(void)removeFromSuperview
方法发布通知。

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

观察与视图相关的更改

–didAddSubview:

–willRemoveSubview:

–willMoveToSuperview:

–didMoveToSuperview

–WillMoveToWindows:

–Didtowindow

这起作用(在iOS8上测试):

:

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

窗口属性可能为零当接收器刚从其superview中移除时,或当接收器刚添加到未连接到窗口的superview时,会发生此情况


您知道视图何时被删除,因为您还是在代码中进行的?只需在那里连接代码或一个助手函数。我发现.Api文档说:willMoveToSuperview:通知接收者其superview即将更改为指定的superview(可能为零)。-------------------------------------当调用此方法且参数为nil时,视图将被删除。这不是所要求的。在问题中明确指出,当视图从其superview中删除时,没有方法获得通知。这可能是UIView类拥有的视图层次结构更改方法的列表,但没有为所请求的用例提供任何方法。“在问题中明确指出,当视图从其superview中删除时,没有方法可以得到通知”您知道,有时问问题的人可能是错的,此外,它还没有“明确说明”。答案是正确的。您可以检查是否在didMoveToSuperview(如果superview为零)或didMoveToWindow(如果window为零)中删除了视图
-(void) didMoveToWindow {
    [super didMoveToWindow]; // (does nothing by default)
    if (self.window == nil) {
        // YOUR CODE FOR WHEN UIVIEW IS REMOVED
    }
}
- (void) willMoveToSuperview: (UIView *) newSuperview{
    if(newSuperview == nil){
        // UIView was removed from superview
    } else {
        // UIView was added to superview
    }
}