我的应用使用UITextField
填充的UIPickerView
,例如所附的屏幕截图。下面是这些设置的示例。
当前,在点击UITextField
时,它会弹出UIPickerView
,但是直到滚动UIPickerView
时才填充字段本身(例如,获取{{ 1}}在下面的示例中填充“是,手术”,用户必须首先滚动到“是,PCI <6小时前”,然后再次备份。
如何获取此信息,以便在点击UITextField
的第一行后填充字段?
UITextField
答案 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]
}
}