Кнопки имеют множество состояний, представленных в виде значений перечисления. У вас есть только два из них:
UIControlStateSelected|UIControlStateDisabled
Весь список в UIControl.h
:
typedef NS_OPTIONS(NSUInteger, UIControlState) {
UIControlStateNormal = 0,
UIControlStateHighlighted = 1 << 0, // used when UIControl isHighlighted is set
UIControlStateDisabled = 1 << 1,
UIControlStateSelected = 1 << 2, // flag usable by app (see below)
UIControlStateApplication = 0x00FF0000, // additional flags available for application use
UIControlStateReserved = 0xFF000000 // flags reserved for internal framework use
};
Итак, что это значит? Как вы можете видеть в определении перечисления, значения, установленные для перечислений, представляют собой отдельные установленные биты для каждого значения. Итак, вот бинарное представление вышеизложенного:
1 << 0 = 0000 0001 b
1 << 1 = 0000 0010 b
.. and so on
Как видите, <<
— это оператор сдвига, и мы просто сдвигаем биты влево, чтобы можно было объединить эти перечисления вместе в одну переменную! Что я имею в виду? Здесь:
0000 0011 b // This is essentially two flags set, on for the highlighted state one for the disabled
Итак, мы обычно используем побитовый оператор ИЛИ для объединения этих флагов:
0000 0001 | 0000 0010 = 0000 0011
Наконец, при объединении этих флагов и отправке их методу для установки заголовка вы указываете базовой реализации изменить заголовок для этих двух параметров в одном вызове метода.
...
Что касается вашего второго вопроса о коде, который не работает, было бы полезно объяснить, что значит «не работает». Это крах? Каков желаемый результат, который вы ищете?
Изменить:
Я только что прочитал комментарии, и кажется, что этот ответ должен охватить еще несколько вопросов:
Чтобы прагматично изменить состояние кнопки, вы должны вызвать что-то вроде:
[sender setEnabled:NO];
Код, который у вас есть, просто говорит кнопке отображать этот текст ПОСЛЕ того, как он изменился на отключенное состояние.
Еще одна проблема, связанная с оператором ||
, который, безусловно, является операцией ИЛИ, но не побитовым ИЛИ. Этот оператор используется для логических выражений вместо побитовых операций.
person
Mazyod
schedule
09.06.2013
|
— это побитовый оператор or из C. Выполните быстрый поиск, чтобы увидеть, что он делает. - person rmaddy   schedule 09.06.2013