UISegmentedControl setSelectedSegmentIndex: без значенияChanged Action - PullRequest
10 голосов
/ 31 декабря 2010

Я устанавливаю selectedSegmentIndex для UISegmentedControl через код.
Всякий раз, когда я делаю это, вызывается действие valueChanged. Это звучит логично для меня, но есть ли способ установить выбранный сегмент, не вызывая действие? Стоит просто обновить дисплей.

Я использовал UISegmentedControl более одного раза, и до сих пор я даже не заметил такого поведения. Но на этот раз мне нужно представить предупреждение, если выбран специальный сегмент. Так что я не могу жить с вызванным действием, если открывается вид, и я хочу показать предыдущее выбранное значение.

Я мог бы отключить действие, изменить выбранное значение и повторно подключить действие. Но, может быть, есть лучший способ.

Ответы [ 3 ]

11 голосов
/ 03 января 2011

Ваш вопрос разумный;Я могу только предположить, что вы нашли ошибку, так как это так необычно.Обычно изменение элемента управления в коде не приводит к возникновению каких-либо событий элемента управления.Установка UIDatePicker date не генерирует событие Value Changed.Установка currentPage в UIPageControl не генерирует событие Value Changed.Установка value для UISlider не генерирует событие Value Changed.Установка on для UISwitch не генерирует событие Value Changed.Точно так же установка UITextField text не генерирует событие Edited Changed.Таким образом, тот факт, что изменение selectedSegmentIndex UISegmentedControl генерирует событие Value Changed, кажется неправильным.Я собираюсь отправить сообщение об ошибке, и я думаю, что вы тоже должны.

Я не вижу очевидного способа определить, было ли событие Value Changed вызвано пользователем касанием или программно.Вам придется поднимать и опускать флаг BOOL или что-то в этом роде.

РЕДАКТИРОВАТЬ: это исправлено в iOS 5.

0 голосов
/ 17 апреля 2014

У меня все еще есть эта проблема в iOS 7.1.

Я перезагружал таблицу и устанавливал индекс сегмента, но он вызывал делегат 'значение изменено'.Чтобы избежать этого, я сначала назначил делегат «управления сегментами», а затем программно установил значение и снова сбросил делегат до текущего класса.Это не вызовет делегата «изменение значения».

0 голосов
/ 31 декабря 2010

Согласно Apple

Свойство selectedSegmentIndex обычно используется для определения номера индекса для идентификации выбранного сегмента (то есть последнего затронутого сегмента).

Значение по умолчанию:UISegmentedControlNoSegment (сегмент не выбран), пока пользователь не коснется сегмента.Установите это свойство в -1, чтобы отключить текущий выбор.

Вы также можете изменить его на другое значение в зависимости от ваших требований.

UISegmentedControl игнорирует это свойство, когда элемент управления находится в моментальномРежим.Когда пользователь касается сегмента, чтобы изменить выбор, генерируется управляющее событие UIControlEventValueChanged;если сегментированный элемент управления настроен для ответа на это событие элемента управления, он отправляет сообщение действия своей цели.

...