Как получить уведомление, когда UIView отсоединился от своего superView? - PullRequest
13 голосов
/ 19 июня 2010

Кажется, что в UIView нет таких методов, как "didRemoveFromSuperview" или "willRemoveFromSuperview". Затем, Как прослушать событие, когда UIView удален из его superView? Я должен использовать KVO? заранее спасибо!

Ответы [ 4 ]

20 голосов
/ 01 февраля 2013

Эта тема довольно старая, но я нашел способ сделать это. Так как поиск в Google оказался недостаточно полезным, вот он (взят из документов UIView)

Наблюдение за изменениями, связанными с просмотром

- didAddSubview:

- willRemoveSubview:

- willMoveToSuperview:

- didMoveToSuperview

- willMoveToWindow:

- didMoveToWindow

18 голосов
/ 19 июня 2015

Это работает (проверено на iOS8):

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

В соответствии с UIView документами :

Реализация по умолчанию этого метода делаетничего такого.Подклассы могут переопределять его для выполнения дополнительных действий при каждом изменении окна.

Свойство окна может иметь значение nil ... Это происходит, когда получатель был только что удален из своего суперпредставления или когда получатель был добавлен в суперпредставление, которое не прикреплено к окну.

5 голосов
/ 19 июня 2010

Вы можете создать подкласс UIView и публиковать уведомления с помощью метода - (void)removeFromSuperview.

4 голосов
/ 11 июля 2016
- (void) willMoveToSuperview: (UIView *) newSuperview{
    if(newSuperview == nil){
        // UIView was removed from superview
    } else {
        // UIView was added to superview
    }
}
...