为啥我的选择器视图没有出现在某些文本字段上?

Posted

技术标签:

【中文标题】为啥我的选择器视图没有出现在某些文本字段上?【英文标题】:Why my pickerview doesn't appear on certain text field?为什么我的选择器视图没有出现在某些文本字段上? 【发布时间】:2020-07-16 14:56:49 【问题描述】:

我找到了this video,其中显示了将带有字段的选择器视图添加到应用程序的方法。我添加了三个字段:

@IBOutlet weak var position: UITextField!
@IBOutlet weak var emplFilter: UITextField!
@IBOutlet weak var locFilter: UITextField!

还有代表当前文本字段和选择器的变量:

var currentTextField = UITextField()
var currentPicker = UIPickerView()

还添加了实现:

UITableViewDelegate, UITableViewDataSource,UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource

添加了所有方法:

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
        if currentTextField == locFilter
            return location.count
        else if currentTextField == test
            return proffestion.count
        else if currentTextField == emplFilter
            return employer.count
        else
            return 0
        
    
    
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? 
        if currentTextField == locFilter
            return location[row].name
        else if currentTextField == test
            return proffestion[row].name
        else if currentTextField == emplFilter
            return employer[row].name
        else
            return ""
        
    
    
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
        if currentTextField == locFilter
            
            locFilter.text = location[row].name
            filters!["location"] = location[row].id
            self.view.endEditing(true)
            
        else if currentTextField == test
            
            filters!["prof"] = proffestion[row].id
            test.text =  proffestion[row].name
            self.view.endEditing(true)
            
        else if currentTextField == emplFilter
            
            emplFilter.text = employer[row].name
            filters!["employer"] = "\(String(describing: employer[row].id))"
            self.view.endEditing(true)
        
    
    
    
    func textFieldDidBeginEditing(_ textField: UITextField) 
        self.currentPicker.delegate = self
        self.currentPicker.dataSource = self
        
        print("click")
        
        
        currentTextField = textField
        
        
        if currentTextField == locFilter
            currentTextField.inputView = currentPicker
        else if currentTextField == test
           currentTextField.inputView = currentPicker
        else if currentTextField == emplFilter
           currentTextField.inputView = currentPicker
        
        
        self.currentPicker.delegate = self
        self.currentPicker.dataSource = self
    

这里我有一个问题 - 当我点击 position 字段时,我在日志中看不到任何输出。我不明白为什么会这样,我尝试添加另一个字段,但并没有改变这种情况。我尝试使用另一个数组,但也没有看到任何选择器视图。我试图在互联网上寻找任何可能的解决方案,但我没有成功:(

【问题讨论】:

在哪里设置文本字段代表? 在视频中的情节提要 @Frankenstein,非常感谢你 :) 我没有为此字段设置代表 :) @Frankenstein,如果你愿意,你可以发布我将应用的答案。我是 ios 开发新手,这就是我犯此错误的原因:( 没关系。即使是经验丰富的开发人员也会犯这个错误。 【参考方案1】:

设置delegateposition UITextField 应该可以解决问题。

position.delegate = self

我还想指出,您无需在每次开始编辑文本字段时重复设置 delegatedataSourceUIPickerView

【讨论】:

不客气。您可以将currentPicker.delegate = self 移动到viewDidLoad 但是在视频中这个代表是在进行字段选择,是不是错了?

以上是关于为啥我的选择器视图没有出现在某些文本字段上?的主要内容,如果未能解决你的问题,请参考以下文章

按标签查找uitextfields

按标签查找 uitextfields

选择器视图 - 文本字段未更新

拥有多个选取器视图

点击日期字段时如何调出日期选择器?

引导日期选择器方向/放置