无法在选择器视图中更改选定的视图

时间:2019-10-29 14:58:28

标签: swift uipickerview

第一次显示pickerView时,我无法更改所选视图。

此外,我尝试在didSelectRow中的selectRow方法之后直接调用viewDidLoad委托方法,但是什么也没发生。

当我正常滑动选择器时,它会按预期方式工作-所选项目已按照didSelectRow方法中的说明进行了更改。

但是我无法弄清楚如何在没有用户交互的情况下首次更改所选视图。

// start - pikerView

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

1 个答案:

答案 0 :(得分:0)

与其他评论一致,我不确定您为什么会遇到问题,但这是一个简单的实现,显示了创建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)"
        }
     }
}