Невозможно изменить выбранный вид в окне выбора - PullRequest
1 голос
/ 29 октября 2019

Я не могу изменить выбранное представление с pickerView, когда оно отображается впервые.

Также я попытался вызвать метод делегата didSelectRow сразу после метода selectRow вviewDidLoad, но ничего не происходит.

Когда я обычно провожу пикапом, он работает как положено - выбранный элемент изменяется, как описано в методе didSelectRow.

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

// start - pikerView

let viewStart = self.start.view(forRow: self.startInex, forComponent: 0)
viewStart?.backgroundColor = .red

1 Ответ

0 голосов
/ 30 октября 2019

В соответствии с другими комментариями, я не уверен, почему у вас возникают проблемы, но вот простая реализация, которая показывает создание 3-столбцового, 5-рядного средства выбора и затем установку всех столбцов (компонентов) на 3-йряд.

class MyVC: UIViewController{
   let pickerRows = 5
   let pickerColumns = 3
   override func viewDidLoad() {
      super.viewDidLoad()
      let picker = UIPickerView(frame: CGRect(x:0, y:100, width:  400, height: 400))
      view.addSubview(picker)
      view.backgroundColor = .systemBackground
      picker.dataSource = self
      picker.delegate = self
      (0..<pickerColumns).map{picker.selectRow(3, inComponent: $0, animated: true)}
   }
}

extension MyVC: UIPickerViewDelegate, UIPickerViewDataSource {
   public func numberOfComponents(in pickerView: UIPickerView) -> Int {
        pickerColumns
     }

     public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        pickerRows
     }

     public func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        switch (row, component) {
        case (_, 0): return "Row \(row)"
        case (_, _): return "\(component) - \(row)"
        }
     }
}
...