我发现一个pickerView的情况相同,我会说如下相同的单词:

我有一个pickerView,当在其中单击textField时会弹出。用户在pickerView中选择他们的位置,并将其放置在textField中。

打开pickerView时,滑块位于第一个元素上,但是如果我单击完成按钮以最小化pickerView,则没有选择任何元素(即,您必须上下滚动以选择第一个元素)

我可以制作一个textFieldpickerView。但是我有3个textFields和3 pickerViews。我可以为每个pickerView做吗?

在代码块下面,适用于一个。

func textFieldDidBeginEditing(_ textField: UITextField) {
    if textField == yourTextField {
        self.yourPickerView.selectRow(0, inComponent: 0, animated: true)
        self.pickerView(yourPickerView, didSelectRow: 0, inComponent: 0)
    }
}

最佳答案

在注释中的描述方式是,如果以前的textField的文本不为空,则当用户单击特定的textField时,要开始编辑textField。因此,请使用textFieldShouldBeginEditing委托方法,如下所示:

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    if textField == textField1 {
        return true
    } else if textField == textField2 && !textField1.isEmpty {
        return true
    } else if textField == textField3 && !textField2.isEmpty {
        return true
    }
    return false
}


然后,当textField开始编辑时显示特定的pickerView

func textFieldDidBeginEditing(_ textField: UITextField) {
    if textField == textField1 {
        // show pickerView1
    } else if textField == textField2 {
        // show pickerView2
    } else if textField == textField3 {
        // show pickerView3
    }
}


然后当用户选择行时,您想要更改textField中的文本

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if pickerView == pickerView1 {
        textField1.text = items1[row]
    } else if pickerView == pickerView2 {
        textField2.text = items2[row]
    } else if pickerView == pickerView3 {
        textField3.text = items3[row]
    }
}

关于swift - 多个UIPickerView在Swift中以编程方式选择第一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53424898/

10-14 19:58