如何强制UIPickerView.selectRow调用didSelectRow方法?

问题描述 投票:2回答:2

运行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) {

}
ios swift uipickerview
2个回答
7
投票

这样就可以选择行了

 self.yourPickerViewName.selectRow(2, inComponent: 0, animated: true)

并且这将触发该方法

 self.pickerView(self.yourPickerViewName, didSelectRow: 2, inComponent: 0)

将它们组合起来模拟用户操作


2
投票

当你以编程方式选择一行时,绝对不会错误地调用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变量。

© www.soinside.com 2019 - 2024. All rights reserved.