Отключенная кнопка все еще вызывает цель
У меня есть настройка системы в моем приложении, где пользователь может сжать представления, чтобы развернуть их на весь экран (например, Flipboard). Однако при этом я хочу отключить некоторые кнопки, которые видны в обоих режимах. Обычно он работает нормально, но он терпит неудачу в следующем случае края:
1) кнопка в режиме без увеличения (не отпускать)
2) Зажмите вид, чтобы увеличить, и подождите, пока он закончит анимацию. Затем кнопка получает значениеuserInteractionEnabled
, равное NO
.
3) отпустите кнопку, и целевая функция вызывается в любом случае. Я поставил точку останова в целевой функции и использовал lldb для проверки кнопки, и userInteractionEnabled
действительно был установлен в NO
.
Ошибаюсь ли я, ожидая, что кнопка, которая отключена, не должна стрелять по своей цели? Должен ли я проверить это в целевой функции?
Вот функция, которая на самом деле отключает кнопки, просто на случай, если вы хотите увидеть (edit: там, кажется, есть некоторая путаница. Нет ничего плохого в приведенном ниже коде, я просто включил его, чтобы быть доскональным.)
//The function that disables the buttons
- (void)disableButtons:(SO2MenuButtons)buttons
{
UIView *view = nil;
if(buttons & SO2Mokuji)
{
view = [self.view viewWithTag:151];
view.alpha = 0.5;
view.userInteractionEnabled = NO;
}
if(buttons & SO2NoteView)
{
view = [self.view viewWithTag:152];
view.alpha = 0.5;
view.userInteractionEnabled = NO;
}
//etc, etc...
}
Обновление:
Я изменил вышеизложенное на это с тем же результатом
- (void)disableButtons:(SO2MenuButtons)buttons
{
UIButton *view = nil;
if(buttons & SO2Mokuji)
{
view = (UIButton *)[self.view viewWithTag:151];
view.enabled = NO;
}
if(buttons & SO2NoteView)
{
view = (UIButton *)[self.view viewWithTag:152];
view.enabled = NO;
}
//etc, etc...
}
EDIT похоже, я не ясно передал, в чем проблема, поэтому я собрал простой проект, который демонстрирует проблему. Вы можете скачать его здесь (в зависимости от того, когда вы читаете это сообщение, предыдущая ссылка может быть просрочена). Проблема в том, что кнопка все еще запускает свой целевой метод после того, как он был отключен. Посмотрев на то, как выглядит вышеприведенная страница, я прошу прощения за использование filedropper...Я не знаю, какой популярный способ поделиться проектами в наши дни >_
2 ответа:
Похоже, что вы используете побитовый оператор и&, в то время как то, что вы хотите, является логическим оператором и &&.
Я нашел способ обойти это, установив
exclusiveTouch
вYES
на этих кнопках. Таким образом, пользователь не может зажать представления, удерживая кнопку. Конечно, это действительно не касается первоначального вопроса, поэтому я не буду принимать этот ответ сейчас. Если никто не опубликует ответ в течение некоторого времени, я приму этот.