2015-10-28 4 views
0

(Моя проблема с WKInterfacePicker, но идеи для стандартного UIPickerView также могут быть применимы.)Ограничение диапазона движения подборщика

мне интересно, если у кого есть какие-либо предложения о том, как я могу ограничить диапазон выбираемых значений на WKInterfacePicker?

Чтобы объяснить: допустим, у меня есть два сборщика, A и B. Каждый из них имеет уникальный массив значений. Если пользователь перемещает сборщик A вверх или вниз, я делаю picker B движением в противоположном направлении, с тем же изменением индекса. Проблема в том, что это перемещение сборщика A будет превышать массив значений B (<0 или >array.count). Мне нужно сохранить диапазон выбираемых значений на сборщике А в пределах сборщика В, хотя А может иметь значения индекса выше или ниже в своем собственном массиве.

Я попытался создать «срез» значения Picker, чтобы соответствовать диапазону пределов Picker B, однако это тогда изменяет индекс нумерации на захватывающем А (т.е. индекс х больше не относится к тому же значению).

Я в идеале ищу способ остановить пользователя, берущего сборщик Прошедший заданный диапазон индексов. Любые идеи/мысли очень приветствуются. Заранее спасибо!

ответ

0

Ответы не получены, но я подумал, что опубликую, как я это сделал, если у кого-то еще есть эта проблема.

Во-первых, некоторые ошибки, как представляется, существуют с wkinterfacepicker в его текущей форме, в основном вокруг него не «правильно оседает» на значение при определенных обстоятельствах (ошибка, поднятая с помощью Apple). Это означает, что мне пришлось обойти это, используя ряд других доступных методов. Вот такой подход я использовал:

  1. (Подразумевается начальные/ранее выбранные значения для обоих PickerA и PickerB были сохранены в переменных.)
  2. Используйте метод pickerDidFocus, чтобы вызвать вычисление текущей позиции PickerB (от значения, хранящегося выше), и его верхние/нижние пределы . Рассчитайте допустимые верхние/нижние значения для PickerA на основе этого диапазона.
  3. Когда PickerA изменен, используйте значение по умолчанию @IBAction из сборщика изменение для сохранения выбранного значения в другой переменной.
  4. Используйте pickerDidSettle, чтобы дождаться PickerA движение до остановки ничего не делать. Рассчитать изменение между старым и новым значением PickerA, сравнить с лимитами, рассчитанными ранее. Если в пределах диапазона, внести изменения в PickerB.
  5. Если вне диапазона для PickerB, отправьте сообщение по умолчанию и установите флаг. В willActivate для оригинала InterfaceController, отметьте флаг и, если активен, setSelectedItemIndex до приемлемого диапазон.

Это может показаться чересчур сложным. Последний шаг, в частности, может показаться сверху, однако спорадическое/ненадежное поведение сборщиков, которые я испытал, даже при использовании pickerDidSettle, означало, что мне пришлось использовать этот подход, чтобы гарантировать, что была пауза перед сбросом сборщиков.

Возможно, это поможет кому-то еще!

Смежные вопросы