使用UIPextField作为输入视图时从UIPickerView获取UITextField

时间:2016-09-15 12:25:08

标签: ios swift uitextfield uipickerview

是否有可能从UITextField获取UIPickerView?我将UIPickerView设为inputView,用于提交文字。我屏幕上的文本字段很少,我想简单地获取显示选择器视图的当前文本字段。

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
{
   // something like let textField = pickerView.requestedTextField
}

有什么办法吗?

3 个答案:

答案 0 :(得分:4)

如果有多个textField显示pickerView,那么在viewController中再创建一个textField实例,并在textFieldDidBeginEditing中使用此对象并指定{{1}的引用那个tempTextField。

textField

现在var selectedTextField: UITextField = UITextField() func textFieldDidBeginEditing(textField: UITextField!) { self.selectedTextField = textField } 的{​​{1}}方法使用此textField o知道当前的编辑字段。

didSelectRow

注意:例如,我使用了PickerViewfunc pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { if self.selectedTextField == countryField { //Set text for countryField } else self.selectedTextField == stateField { //Set text for stateField } } 您可以使用textField来设置文字。

答案 1 :(得分:2)

将同一tag设置为pickerviewtextfield两者。

现在您可以在didSelectRow中找到您的代码,

  let myTag = pickerView.tag

然后从myTag您可以获得textfield类似的内容,

   let myTextField = self.view.viewWithTag(myTag) as! UITextField

答案 2 :(得分:2)

正如用户Lion在他的answer中正确指出的那样,您可以通过向UITextFieldpickerView提供标记来获得相应的textField。但是,为其提供相同的标记的问题是viewWithTag可能会返回UIPickerView本身,具体取决于子视图的顺序。

由于这是不可靠的,更好的解决方案是给UITextField赋予UIPickerView标签的负数(例如1和-1)。要获得UITextView,您可以在方法中执行类似的操作,一旦您将选择器视图和文本视图分配给标记:

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    let textField = view.viewWithTag(-pickerView.tag) as! UITextField
    //Use textField
}