2009-06-08 2 views
1

Я создаю приложение для какао-стола. Я хочу знать, когда статус NSView isHidden изменился. Пока использование цели/действия не помогает, и я не могу найти что-либо в NSNotification для этой задачи. Я бы хотел избежать переопределения метода setHidden, потому что тогда мне придется переопределить весь производный класс NSView, который я использую.Как получить уведомления о NSView isHidden изменения?

ОБНОВЛЕНИЕ: Я закончил использование KVO. Путь для «isHidden» «скрыт», вероятно, потому, что сеттер «setHidden».

ответ

3

Вы можете использовать Key-Value Observing, чтобы ознакомиться с объектами NSView (ы) isHidden. Когда вы получаете уведомление об изменении с одного из этих видов, вы можете проверить, скрыто ли оно или один из его списков наблюдения с -isHiddenOrHasHiddenAncestor.

Слово предупреждения: получение ключевого значения. Соблюдение права немного сложно. Я бы очень рекомендовал прочитать сообщение this Майкл Эш или использовать метод -[NSObject gtm_addObserver:forKeyPath:selector:userInfo:options] из категории NSObject+KeyValueObserving от Google Toolbox for Mac.

0

Не могли бы вы переопределить метод setter для свойства hidden, чтобы он вызывал некоторые пользовательские уведомления в вашем приложении?

+0

Я избегаю этого метода. Я забыл добавить эту деталь к моему вопросу. Спасибо за напоминание. – phi

1

В общем случае можно переопределить viewWillMoveToWindow или другие связанные с ним методы в NSView, чтобы показать, когда будет отображаться представление (т. Е. Это окно находится в списке отображения окна, а представление не скрыто). Таким образом, зависимость от KVO для скрытого ключа, используемого выше, удаляется, что работает только при вызове setIsHidden в этом представлении. В переопределении «окно» (или [само окно]) укажет, помещается ли представление в видимую иерархию вида (окно не равно нулю) или выведено из него (окно равно нулю).

Я использую его, например, для запуска/остановки таймера для периодического обновления элемента управления из онлайн-данных - когда я хочу только обновить, пока элемент управления виден.

Смежные вопросы