如何强制UIPickerView.selectRow调用didSelectRow方法?
How to force UIPickerView.selectRow call didSelectRow method?
是否可以调用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) {
}
这到select行
self.yourPickerViewName.selectRow(2, inComponent: 0, animated: true)
这是触发方法
self.pickerView(self.yourPickerViewName, didSelectRow: 2, inComponent: 0)
将它们结合起来模拟用户操作
当您以编程方式 select 一行时,func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
未被调用绝对不是错误。文档说:
Called by the picker view when the user selects a row in a component.
这是一个委托方法,仅当用户 select 连续一行时才会调用。所以如果你 select 这样一行,它自然不会被调用:
pickerView.selectRow(0, inComponent: 0, animated: false)
您接受的答案中的 hack 有效,但从您的视图控制器调用委托方法不是好的做法。我建议您创建另一种方法,该方法将在用户或以编程方式 select 编辑行时执行您想要的操作:
例如
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)
}
并且当您以编程方式 select 一行时:
pickerView.selectRow(0, inComponent: 0, animated: false)
doStuff(for: 0, component: 0)
如果您需要在 doStuff
方法中对 pickerView 执行某些操作,您可以添加另一个参数并在调用时传递它,或者直接访问 pickerView 变量。
是否可以调用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) {
}
这到select行
self.yourPickerViewName.selectRow(2, inComponent: 0, animated: true)
这是触发方法
self.pickerView(self.yourPickerViewName, didSelectRow: 2, inComponent: 0)
将它们结合起来模拟用户操作
当您以编程方式 select 一行时,func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
未被调用绝对不是错误。文档说:
Called by the picker view when the user selects a row in a component.
这是一个委托方法,仅当用户 select 连续一行时才会调用。所以如果你 select 这样一行,它自然不会被调用:
pickerView.selectRow(0, inComponent: 0, animated: false)
您接受的答案中的 hack 有效,但从您的视图控制器调用委托方法不是好的做法。我建议您创建另一种方法,该方法将在用户或以编程方式 select 编辑行时执行您想要的操作:
例如
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)
}
并且当您以编程方式 select 一行时:
pickerView.selectRow(0, inComponent: 0, animated: false)
doStuff(for: 0, component: 0)
如果您需要在 doStuff
方法中对 pickerView 执行某些操作,您可以添加另一个参数并在调用时传递它,或者直接访问 pickerView 变量。