Вопрос

Быстрый вопрос о классе 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, как я должен был узнать сегодня. До сих пор, как я думал, категории - это языковая функция, позволяющая исправить чей-то ужасный дизайн класса ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top