Как перейти к определенной строке в UIPickerView в iOS Swift 3

У меня есть UIPickerView со значениями 0...250. В UIPickerView есть 2 компонента. В первом компоненте я показываю эти значения. но я хочу обнаружить метод прокрутки UIPickerView. потому что, когда появляется pickerView, значение, которое я хотел бы отобразить, равно 75. Это означает, что pickerView прокручивается до строки с номером 75. и пользователь может прокручивать вверх и вниз средство выбора со значениями 0...250. Я пробовал этот код в методе UIPickerView titleForRow row: Int

pickerView.selectRow(75, inComponent: 0, animated: true)

в этом случае, когда появляется pickerView, выбранное значение равно 75. Ниже приведено именно то, что я хочу

введите здесь описание изображения

но проблема в том, что при прокрутке pickerView мое приложение вылетает со следующей ошибкой

[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'

кто поможет мне пожалуйста заранее спасибо :-)


person Asim Ifitkhar Abbasi    schedule 31.08.2017    source источник


Ответы (2)


Пока внутри метода viewDidLoad выборщик пуст. Вы можете сделать это, если отложите выполнение вызова select до завершения загрузки данных. Скорее всего, одного цикла будет достаточно.

Вы можете добавить его в viewDidAppear или viewWillAppear

person Ravi B    schedule 31.08.2017
comment
я не хочу делать это optional func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int,inComponent component: Int) я хочу показывать 75 когда появляется pickerView - person Asim Ifitkhar Abbasi; 31.08.2017
comment
Хорошо, для этого вы можете использовать pickerView.selectRow(75, inComponent: 0, animated: true). Но это может быть ваша линия в viewdidLoad(), попробуйте переместить select в viewDidAppear. - person Ravi B; 31.08.2017
comment
Не могли бы вы предоставить больше кода здесь .. Bcz, похоже, источник данных (ваш массив) не подходит. - person Ravi B; 31.08.2017

Это происходит потому, что вы прокручиваете до index 75 до того, как pickerView инициализирует этот cell. UIPickerView сначала инициализирует только видимые ячейки, а остальные ячейки инициализируются по мере прокрутки.

Сделайте это в viewDidAppear

override func viewDidAppear(_ animated: Bool) {
    pickerView.selectRow(75, inComponent: 0, animated: true)
}
person mini coder    schedule 15.11.2019