【问题标题】:Multiple UIPickerView select first row programmatically in Swift多个 UIPickerView 在 Swift 中以编程方式选择第一行
【发布时间】:2018-11-22 06:15:55
【问题描述】:

我发现一个 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)
    }
}

【问题讨论】:

  • 为什么不将默认文本的文本字段设置为选择器第一行的值?如果用户从不选择文本字段,文本字段是否应该为空?
  • @RakeshaShastri 实际上用户必须选择一个,因为第二个文本字段项目取决于选择的第一个项目,而第三个取决于第二个。您对此有何建议?
  • 有一个额外的选择器项目,上面写着“-”(尚未选择)并将所有文本字段设置为此。不要让用户继续,除非他将此值更改为有效选择。

标签: swift uitextfield swift4 uipickerview pickerview


【解决方案1】:

您在评论中如何描述,如果前一个 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]
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    相关资源
    最近更新 更多