Как прислушиваются к изменению состояния UIButton?

Я расширяюсь UIButton с универсальной функциональностью для изменения определенных атрибутов появления на основе отображенного заголовка.

Чтобы сделать это, я должен обнаружить и ответить на изменения в свойстве "состояния". Это так, я удостоверяюсь, что появление корректируется правильно, если пользователь установил различные заголовки для различных состояний. Я предположил, что должен буду использовать своего рода KVO как следующее:

[self addObserver:self 
       forKeyPath:@"state" 
          options:NSKeyValueObservingOptionNew 
          context:nil];

Но это, кажется, не запускает observeValueForKeyPath:... метод для "состояние" или "currentTitle". Я предполагаю, что это вызвано тем, что UIButton не реализует шаблон KVO для тех свойств.

Я не хочу просто прислушиваться к щелчкам. Те события вызывают изменение состояния, но не являются единственными потенциальными причинами.

Кто-либо знает способ слушать и ответить на изменения состояния UIButton?

Спасибо


ОБНОВЛЕНИЕ

Просто примечание, так как я изучил несколько вещей в прошлых годах пары ;).

Я с тех пор говорил с некоторыми людьми Apple, которые знают, и причина, KVO не работает над государственной собственностью, должна тому, что НИ ОДИН из UIKit, как не гарантируют, будет KVO совместимый. Мысль, которую стоило повторить здесь - при попытке слушать свойство класса платформы UIKit, знать, что это может работать, но официально не поддерживается и могла повредиться на различных версиях iOS.

20
задан Alex Cio 19 June 2015 в 09:17
поделиться

2 ответа

Хорошо, я нашел решение, которое работает. Вы можете прослушать текстовое свойство кнопки titleLabel.

[self.titleLabel addObserver:self 
                  forKeyPath:@"text" 
                     options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld 
                     context:nil];

Кажется, что он запускается дважды за каждое изменение, поэтому вам следует убедиться, что значения @ "old" и @ "new" в переданном словаре изменений различны.

ПРИМЕЧАНИЕ. Не используйте напрямую @ "old" и @ "new". Константы - это NSKeyValueChangeOldKey и NSKeyValueChangeNewKey соответственно.

11
ответ дан 30 November 2019 в 01:13
поделиться

Подкласс UIButton, переопределить setState: это то, что у меня работает. Это, наверное, не лучший способ, но у меня это получилось.

Приносим извинения за приведенный выше ответ, это было неверно. Надо было действительно взглянуть на мой код. В моем случае мне нужно было только изменить состояние на основе выделения, поэтому я переопределил - setHighlight: , чтобы изменить нужные мне значения. YMMV.

-2
ответ дан 30 November 2019 в 01:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: