Кажется, что в UIView нет таких методов, как "didRemoveFromSuperview" или "willRemoveFromSuperview". Затем, Как прослушать событие, когда UIView удален из его superView? Я должен использовать KVO? заранее спасибо!
didRemoveFromSuperview
willRemoveFromSuperview
Эта тема довольно старая, но я нашел способ сделать это. Так как поиск в Google оказался недостаточно полезным, вот он (взят из документов UIView)
Наблюдение за изменениями, связанными с просмотром - didAddSubview: - willRemoveSubview: - willMoveToSuperview: - didMoveToSuperview - willMoveToWindow: - didMoveToWindow
Наблюдение за изменениями, связанными с просмотром
- didAddSubview:
- willRemoveSubview:
- willMoveToSuperview:
- didMoveToSuperview
- willMoveToWindow:
- didMoveToWindow
Это работает (проверено на iOS8):
-(void) didMoveToWindow { [super didMoveToWindow]; // (does nothing by default) if (self.window == nil) { // YOUR CODE FOR WHEN UIVIEW IS REMOVED } }
В соответствии с UIView документами :
UIView
Реализация по умолчанию этого метода делаетничего такого.Подклассы могут переопределять его для выполнения дополнительных действий при каждом изменении окна. Свойство окна может иметь значение nil ... Это происходит, когда получатель был только что удален из своего суперпредставления или когда получатель был добавлен в суперпредставление, которое не прикреплено к окну.
Реализация по умолчанию этого метода делаетничего такого.Подклассы могут переопределять его для выполнения дополнительных действий при каждом изменении окна.
Свойство окна может иметь значение nil ... Это происходит, когда получатель был только что удален из своего суперпредставления или когда получатель был добавлен в суперпредставление, которое не прикреплено к окну.
Вы можете создать подкласс UIView и публиковать уведомления с помощью метода - (void)removeFromSuperview.
- (void)removeFromSuperview
- (void) willMoveToSuperview: (UIView *) newSuperview{ if(newSuperview == nil){ // UIView was removed from superview } else { // UIView was added to superview } }