运行func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
时是否可以调用UIPickerView.selectRow(4, inComponent: 0, animated: false)
方法
或者什么是正确的存档方式?
我的实施
let pickerView = UIPickerView()
pickerView.delegate = self
pickerView.dataSource = self
pickerView.selectRow(0, inComponent: 0, animated: false)
textField.inputView = pickerView
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
}
这样就可以选择行了
self.yourPickerViewName.selectRow(2, inComponent: 0, animated: true)
并且这将触发该方法
self.pickerView(self.yourPickerViewName, didSelectRow: 2, inComponent: 0)
将它们组合起来模拟用户操作
当你以编程方式选择一行时,绝对不会错误地调用func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
。文件说:
当用户选择组件中的行时,由选取器视图调用。
它是一个委托方法,只有在用户选择行时才会调用它。所以当你选择这样的行时,它自然不会被调用:
pickerView.selectRow(0, inComponent: 0, animated: false)
您接受的答案中的黑客行为有效,但从视图控制器调用委托方法并不好。我建议您创建另一种方法,当用户或编程选择行时,它将执行您想要的操作:
EG
func doStuff(for row: Int, component: Int) {
// Do your stuff here
}
然后在你的委托方法中:
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
doStuff(for: row, component: component)
}
当您以编程方式选择行时:
pickerView.selectRow(0, inComponent: 0, animated: false)
doStuff(for: 0, component: 0)
如果你需要在doStuff
方法中使用pickerView做一些事情,你可以添加另一个参数并在调用它时传递它,或者直接访问pickerView变量。