Отключенная кнопка все еще вызывает цель


У меня есть настройка системы в моем приложении, где пользователь может сжать представления, чтобы развернуть их на весь экран (например, 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 2

2 ответа:

Похоже, что вы используете побитовый оператор и&, в то время как то, что вы хотите, является логическим оператором и &&.

Я нашел способ обойти это, установив exclusiveTouch в YES на этих кнопках. Таким образом, пользователь не может зажать представления, удерживая кнопку. Конечно, это действительно не касается первоначального вопроса, поэтому я не буду принимать этот ответ сейчас. Если никто не опубликует ответ в течение некоторого времени, я приму этот.