将它用作输入视图时从 UIPickerView 获取 UITextField

Get UITextField from UIPickerView when using it as input view

有没有可能从UIPickerView得到UITextField?对于提交的文本,我将 UIPickerView 设置为 inputView。我的屏幕上只有几个文本字段,我想简单地获取显示选择器视图的当前文本字段。

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

有什么办法吗?

为您的 pickerviewtextfield 设置相同的 tag

现在你可以在 didSelectRow 中获取你的标签了,

  let myTag = pickerView.tag

然后从 myTag 你可以得到你的 textfield 类似的东西,

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

如果您有多个显示 pickerView 的 textField,则像这样在您的 viewController 中再创建一个 textField 实例,并在 textFieldDidBeginEditing 中使用此对象并分配textField 对 tempTextField 的引用。

var selectedTextField: UITextField = UITextField()

func textFieldDidBeginEditing(textField: UITextField!) { 
    self.selectedTextField = textField
}

现在在 PickerViewdidSelectRow 方法中使用此 textField o 知道当前的编辑字段。

func 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 
    }
}

注意:例如我用过countryFieldstateField你可以用textField来设置文本。

正如用户 Lion 在他的 中正确指出的那样,您可以通过给 pickerViewtextField 一个标签来获得相应的 UITextField。然而,给他们 same 标签的问题是 viewWithTag 可能 return 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
}