UISegmentedControl Behavior
-
10-07-2019 - |
Вопрос
Быстрый вопрос о классе UISegmentedControl на iPhone.
Надеемся, что некоторые, возможно, заметили, что в своем состоянии по умолчанию с 2 сегментами сегментированный элемент управления все еще будет переключаться, даже если пользователь нажимает на сегмент, который выбран в данный момент.
Я видел UISegmentedControls в приложениях, которые отменяют это поведение и не переключаются, когда пользователь нажимает на выбранный сегмент. А именно, приложение Apple iTune Store.
Есть ли простой способ предотвратить такое поведение, которое я пропускаю, или мне нужно записать некоторую логику в valueChanged?
Я пытался отключить выбранные в данный момент сегменты и включить невыбранные, но, похоже, это меняет внешний вид элемента управления, когда я не хочу, чтобы это делалось.
Есть идеи?
Решение
Посмотрите в заголовочном файле UISegmentedControl.h (простой способ - дважды щелкнуть "UISegmentedControl" в XCode с удержанной командой).
Там вы увидите несколько элементов в структуре _segmentedControlFlags . Если вы создаете категорию в UISegmentedControl, вы можете манипулировать любым из этих элементов, включая dontAlwaysToggleForTwoSegments , который, как вы можете догадаться по названию, - это то, что вы ищете.
Поскольку это задокументировано в заголовке API (но не в реальной документации), его следует использовать довольно безопасно.
Другие советы
Это поведение по умолчанию было изменено в API 3.0.
В 3.0 " _segmentedControlFlags " было изменено на мгновенное " свойство, которое все еще можно найти в заголовочном файле UISegmentedControl.h .
Доступ к _segmentedControlFlags через категорию рассматривается как использование частного API и, таким образом, является нарушением лицензионного соглашения Apple, как я должен был узнать сегодня. До сих пор, как я думал, категории - это языковая функция, позволяющая исправить чей-то ужасный дизайн класса ...