立即使用UIPickerView选项填充UITextField

时间:2018-10-24 10:05:53

标签: ios swift uitextfield uipickerview

我的应用使用UITextField填充的UIPickerView,例如所附的屏幕截图。下面是这些设置的示例。

当前,在点击UITextField时,它会弹出UIPickerView,但是直到滚动UIPickerView时才填充字段本身(例如,获取{{ 1}}在下面的示例中填充“是,手术”,用户必须首先滚动到“是,PCI <6小时前”,然后再次备份。

如何获取此信息,以便在点击UITextField的第一行后填充字段?

UITextField

Example screenshot

3 个答案:

答案 0 :(得分:2)

您可以将以下功能修改为

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if row.index == 1 && textField.text.count == 0 {
            // set titleForRow to the UITextField
        }
        if pickerView.tag == 1 {
            return prevCardiacIntervPickerOption[row]
        }
}

有一项检查,如果UITextfield还没有为空,而row.index一个,则应该填充titleForRow的值在指定的UITextfield

其他快速解决方案可能是在UITextField中用prevCardiacIntervPickerOption[0]填充viewDidAppear。但是在这种情况下,UITextfield将使用第一个数组元素的默认值进行填充。如果您想将UITextfield保留为空,直到它被选中一次,那么请寻求第一个解决方案。

答案 1 :(得分:1)

您需要实现textFieldShouldBeginEditing:方法。

设置代表

yourTextfield.delegate = self

实施委托方法

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {


     if (textField == yourTextfield) {  

        // your logic goes here...
        yourTextfield.text = prevCardiacIntervPickerOption.first

     }

   return true
}

答案 2 :(得分:0)

UITextField与选择器相关联通常不是一个好主意,我的意思是,如果只能选择选项,那么为什么要允许自由文本?您可以只使用一个可选行来打开选择器并使用默认值。

但是如果您需要这种确切的行为,我会在文本字段上设置一个委托,并在第一次按下时检查它是否为空:

self.myTextField.delegate = self

func textFieldDidBeginEditing(_ textField: UITextField) {
  if textField == myTextField && !textField.text {
     textField.text = pickerViewDataSource[0]
  }
}