Почему свойство userInteractionEnabled не работает на конкретном UIButton?
Это, вероятно, самая разочаровывающая ситуация, с которой я сталкивался, и, вероятно, она имеет самое простое решение.
У меня есть это UIButton
storeB
который правильно инициализируется во время viewDidLoad:
зов моего UIViewController
, Прежде чем создать кнопку, я создаю 5 других кнопок.
В течение viewDidLoad:
Я запускаю этот метод под названием setupFBConditions
который определяет, будет ли мой forwardB
объект кнопки должен иметь alpha
0,5 с userInteractionEnabled
установите в 0. В этом случае кнопка выглядит и работает так, как она должна быть (по сути, как будто ее там нет).
Кроме того, во время этой конкретной анимации, которая выполняется на одном из моих UIView
объекты, я решил установить userInteractionEnabled
собственность моего restartB
равным 0 (чтобы во время анимации не происходило никакого взаимодействия. Это исполнение также успешно.
Тем не менее, когда я решил написать:
storeB.userInteractionEnabled = NO;
storeB.alpha = 0.5;
в начале анимации (с намерением сохранить это состояние до завершения игры или restartB
прослушивается снова), и NSLog
объект кнопки, журнал говорит, что userInteractionEnabled
свойство NO
а также alpha
0,5, как и должно быть. Однако ни в коем случае эти свойства не отражаются в пользовательском интерфейсе.
storeB
мой даже не мой последний взгляд, который будет добавлен в иерархию (хотя это последний UIButton
). Я понятия не имею, почему эти изменения не вступают в силу.
Я не собираюсь публиковать больше кода, потому что нет ничего, кроме двух строк выше. Это, по-видимому, просто проблема + решение.
************ ОБНОВИТЬ **************
Вот отчет журнала в конце одного из моих жестов смахивания (после storeB.userInteractionEnabled = NO;
):
<UIButton: 0x1585ae80; frame = (270 8; 42 42); alpha = 0.5; opaque = NO;
userInteractionEnabled = NO; layer = <CALayer: 0x15899da0>>
<UIView: 0x1592bba0; frame = (0 0; 320 568); layer = <CALayer: 0x15934ae0>>
Кадр правильный, настройки альфа и взаимодействия правильные, а кадр суперпредставления (0,0,320,568) - это именно то, что и должно быть.
*********** ВТОРОЕ ОБНОВЛЕНИЕ **************
В случае, если кто-то считает это полезным... проверьте _retainCount
собственность вашего UIView
/UIButton
и посмотрите, выглядит ли он необычно высоко, принимая во внимание все операции, выполненные с объектом. Мой счет сохранения был 4, когда он должен был быть 2, поэтому каждый раз, когда я менял свойство (то, что я думал, был мой первый случай storeB
), на самом деле это влияло только на второй случай (о котором я даже не подозревал).