iOS UIButton - Разница между UIButton setUserInteractionEnabled и setEnabled
Подождите!!!:
Я знаю, что вы можете подумать, что на этот вопрос задавали и отвечали несколько раз раньше. Но я могу гарантировать вам, что этот вопрос уникален.
Вопрос:
В приложении для iOS просто представьте, что есть две кнопки, как показано на рисунке ниже, и у них есть два действия, которые ведут себя как переключающая логика.
И это логика может быть следующим:
- (IBAction)testBtnClicked:(id)sender {
if ([self.testBtn isEnabled]) {
[self.testBtn setEnabled:NO];
[self.setInteractionBtn setUserInteractionEnabled:YES];
} else {
[self.testBtn setEnabled:YES];
[self.setInteractionBtn setUserInteractionEnabled:NO];
}
}
- (IBAction)setInteractionBtnClicked:(id)sender {
if ([self.setInteractionBtn isEnabled]) {
[self.setInteractionBtn setUserInteractionEnabled:NO];
[self.testBtn setEnabled:YES];
} else {
[self.setInteractionBtn setUserInteractionEnabled:YES];
[self.testBtn setEnabled:NO];
}
}
Так что я не вижу большой разницы между setEnabled
метод и setUserInteractionEnabled
метод. Они же ведут себя как единый метод, который блокирует пользователя, не позволяя использовать его. Однако, если это так же, как мы могли бы обнаружить isEnabled
true
или же false
даже когда setUserInteractionEnabled
установлено быть False
?
Ниже приведены причины, по которым этот вопрос не является возможной копией другой темы вопросов и ответов в SO:
- Даже если какой-то высокопоставленный код, возможно, пометил мой вопрос как возможный дубликат, этот вопрос и ответ не дали мне правильного понимания.
- Как сказал @danh,
По крайней мере, одна из причин заключается в том, что во время анимации взаимодействие с пользователем на UIViews отключено. Было бы неправильно, чтобы элементы управления рисовали себя серыми, пока они анимированы. Так что, по крайней мере, во время анимации два свойства имеют разные значения. Дали мне реальный ответ или причину, чтобы увидеть, что эти два метода по двум причинам. Потому что любой может сказать, что
setUserInteractionEnabled
не вносит изменений в состояние пользовательского интерфейса, но, по крайней мере, только в ответе @ danh сначала было указано, что оно может быть неявно использовано во время анимации пользовательского интерфейса.
3 ответа
Они почти одинаковы. userInteractionEnabled
является собственностью UIView
это переключает, получает ли представление какие-либо пользовательские прикосновения. enabled
является собственностью UIControl
(который является подклассом UIView
и суперкласс UIButton
) и имеет тот же эффект. Одно отличие состоит в том, что элементы управления UIKit могут рисовать себя по-разному в зависимости от их enabled
состояние, которое не имеет место для абстрактного UIView
,
Хорошо, тогда почему?
поскольку UIControl
подклассы наследуют оба, почему есть два почти одинаковых свойства? Почему бы элементам управления не отбросить идею "включенного" и нарисовать себя по-разному в зависимости от их userInteractionEnabled
государство?
По крайней мере, одна из причин заключается в том, что во время анимации взаимодействие с пользователем отключено UIView
s. Было бы неправильно, чтобы элементы управления рисовали себя серыми, пока они анимированы. Так что, по крайней мере, во время анимации два свойства имеют разные значения.
Характеристики включены:
- Это свойство
UIControl
- Суперкласс для
UIButton
, - Он влияет на визуальное состояние объекта и, как правило, является предпочтительным методом отключения элемента управления.
Характеристики userInteractionEnabled:
- Свойство
UIView
- Код, который взаимодействует с вашими элементами управления, с большей вероятностью проверяет, являются ли кнопки
enabled
чем если бы ихuserInteractionEnabled
свойство установлено. Это более условно.
@property(nonatomic, getter=isUserInteractionEnabled) BOOL userInteractionEnabled
Логическое значение, которое определяет, будут ли пользовательские события игнорироваться и удаляться из очереди событий. Если установлено значение NO, пользовательские события, такие как касание и клавиатура, предназначенные для просмотра, игнорируются и удаляются из очереди событий. Если установлено значение YES, события доставляются в представление в обычном режиме. Значением по умолчанию для этого свойства является YES.
Обсуждение:
Во время анимации пользовательские взаимодействия временно отключаются для всех представлений, участвующих в анимации, независимо от значения в этом свойстве. Вы можете отключить это поведение, указав опцию UIViewAnimationOptionAllowUserInteraction при настройке анимации.
@property(nonatomic, getter=isEnabled) BOOL enabled
Логическое значение, определяющее, включен ли приемник.
Обсуждение:
Укажите ДА, чтобы включить контроль; в противном случае укажите NO, чтобы отключить его. Значением по умолчанию является ДА. Если включено состояние НЕТ, элемент управления игнорирует сенсорные события, и подклассы могут рисовать по-разному.
Для справки:
Как @danh утверждает:
"По крайней мере, одна из причин заключается в том, что во время анимации взаимодействие с пользователем на UIViews отключено. Было бы неправильно, чтобы элементы управления отображали себя серыми, пока они анимированы. Поэтому, по крайней мере, во время анимации, два свойства имеют разные значения".