Swift UIPickerView-pickerView(uu:titleForRow:forComponent:)方法

Swift UIPickerView-pickerView(uu:titleForRow:forComponent:)方法,swift,uipickerview,Swift,Uipickerview,我使用UIPickerView及其方法pickerView(uu2;:titleForRow:forComponent:)来填充行。一切正常,我可以通过UI查看行。我想知道这个方法被调用了多少次——例如,我有一个组件和3行,如果我通过print命令跟踪方法调用,我会发现8个调用(运行) 我想为每一行做具体的动作,但只做一次。有没有暗示我做错了什么以及我应该如何做得更好? 谢谢。当picker视图需要用于给定组件中给定行的标题时,它会调用picker视图(uu:titleForRow:forCom

我使用
UIPickerView
及其方法
pickerView(uu2;:titleForRow:forComponent:)
来填充行。一切正常,我可以通过UI查看行。我想知道这个方法被调用了多少次——例如,我有一个组件和3行,如果我通过print命令跟踪方法调用,我会发现8个调用(运行)

我想为每一行做具体的动作,但只做一次。有没有暗示我做错了什么以及我应该如何做得更好? 谢谢。

当picker视图需要用于给定组件中给定行的标题时,它会调用picker视图(uu:titleForRow:forComponent:)
。因此,每当需要标题时,就会调用委托函数。正如您可能已经注意到的,这些方法可以多次调用,这是正常的

在您的:

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
如果有
,您可以创建一个字典来检查之前是否设置了值。大概是这样的:

var dictionary = [Int: Bool]()
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    if let value = dictionary[row] {
        if !value {
            // set value, the value of row has not been set before
            ...
            // set that rows value to true so that you know it has been set
            dictionary[row] = true
        }
    }
    return "some string"
}

您可以向数据中添加一个布尔标志,该标志将决定是否执行调用。

谢谢,我也这样做了,但超出了方法本身。但我也会试试你的建议。