多个UIPickerView在Swift中以编程方式选择第一行

时间:2018-11-22 06:15:55

标签: swift uitextfield swift4 uipickerview pickerview

对于一个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)
    }
}

1 个答案:

答案 0 :(得分: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]
    }
}