UIPickerView 作为多个 UITextField 的 inputView

Posted

技术标签:

【中文标题】UIPickerView 作为多个 UITextField 的 inputView【英文标题】:UIPickerView as an inputView of multiple UITextFields 【发布时间】:2019-02-08 10:15:07 【问题描述】:

我的代码中有三个UITextFields 和一个UIPickerView,如所有文本字段中的inputView。

我想在UIPickerViewDelegate 方法pickerView(_:didSelectRow:inComponent:) 内确定哪个文本字段调用/打开了UIPickerView。

这是我尝试过的示例代码:

let tf1: UITextField()
let tf2: UITextField()
let tf3: UITextField()
let pcv: UIPickerView()


tf1.inputView = pcv
tf2.inputView = pcv
tf3.inputView = pcv


// Picker view delegate
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
    if (tf1.isFirstResponder) 
       print("tf1")
     else if (tf2.isFirstResponder) 
       print("tf2")
     else if (tf3.isFirstResponder) 
       print("tf3")
     else 
       print("Any other view")
    


还有其他更好的方法来处理这个问题吗?

(Objective C 或 Swift,任何解决方案)

【问题讨论】:

我知道您想在 pickerview 委托中执行此操作,但如果您对其他事情持开放态度,您可以通过 textFieldDidBeginEditing 获取 UITextFieldDelegate @DanielAmarante - 请指导我。怎么样? 您可以使用 tf1.inputView != nil 进行检查 对不起,我没看到。 isFirstResponder 发生了什么? 为什么你认为这不是更好的处理方式? 【参考方案1】:

在您的文本字段委托上为您的文本字段分配输入视图和标签

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool 
   textField.inputView = pcv
   pcv.tag =  textField.tag
    return true;

最后获取pickerview的标签,以识别您点击的文本字段。

 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
        print("pickerView == \(pickerView.tag)")


【讨论】:

正确答案..!但我的错 - 我用过IQKeyboardManager @Krunal - 好的,您需要禁用单个视图控制器的功能。否则,您需要覆盖一个视图控制器的 IQKeyboard 管理器委托 是的,你是对的,我可以。但是我将不得不手动处理文本字段(位置)。 @Krunal - 检查此链接一次:github.com/hackiftekhar/IQKeyboardManager/issues/473

以上是关于UIPickerView 作为多个 UITextField 的 inputView的主要内容,如果未能解决你的问题,请参考以下文章

UIPickerview 多个文本字段 Xcode

在多个 viewController 中显示的通用或单个 uipickerview

关于多个 UIPickerview

在选择时关闭作为 UITextField 输入视图的 UIPickerView

多个 UIPickerview 错误

如何使用 didSelectRow 为多个 UIPickerView 使用数据