Ios 当UIView从其superView分离时,如何得到通知?
UIView似乎没有类似“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
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
}
}