如何确保在文本字段中仅选择选择器数据

Posted

技术标签:

【中文标题】如何确保在文本字段中仅选择选择器数据【英文标题】:how to ensure only picker data is selected in the textfield 【发布时间】:2019-11-21 12:27:55 【问题描述】:

我在 UITextfield 中为选择器函数使用以下代码,我应该如何确保选择数组中的值并且没有其他数据输入 我分享了下面的代码,我使用“守卫”来检查字段是否为空 代码

var spinneCPickerData: [String] = ["1", "2", "3", "4", "5"]
@IBOutlet var pickerfield: UITextField!
    
override func viewDidLoad() 
    super.viewDidLoad()
            
    let spinnerCPicker = UIPickerView()
    spinnerCPicker.delegate = self
    pickerfield = spinnerCPicker

    
func numberOfComponents(in pickerView: UIPickerView) -> Int 
    return 1

        
func pickerView( _ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int       
    return spinneCPickerData.count

        
func pickerView( _ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? 
    return spinneCPickerData[row]

        
func pickerView( _ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
    pickerfield.text = spinneCPickerData[row] as String
    view.endEditing(true)


func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
    // This method is triggered whenever the user makes a change to the picker selection.
    // The parameter named row and component represents what was selected.

    
func setdata() 
    guard let text data = PostCategoryField.text, !postcategory.isEmpty,  else 
        self.view.makeToast("Please Enter the Category!")
        return
    

【问题讨论】:

【参考方案1】:

您需要将inputView 设置为您的pickerfield

这样你就可以做到……

声明一个属性pickerView

 private let pickerView = UIPickerView(frame: .init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 216))

viewDidLoad 方法中设置委托和数据源。

    pickerView.dataSource = self
    pickerView.delegate = self
    pickerfield.inputView = pickerView

所以当pickerfield 成为第一响应者时,选择器视图将显示在键盘的位置。

所以用户必须从选择器视图中选择一个值

更新

您可以通过以下方式通过if-let 执行此操作。您需要将此代码放在要验证文本字段值的位置。

//When pickerfield.text value is one of the value of spinneCPickerData array
if let txt = pickerfield.text, spinneCPickerData.contains(txt) 

       print("the textfield'd value is from the array")
 

【讨论】:

这已经发生了,在提交选择器值以验证该值是否来自已为此设置的数组之前我想要的所有内容,如何使用保护语句来做到这一点? 如果输入视图是选择器视图(不是键盘),则表示该值必须从键盘中选择。所以我认为你不需要检查那个。

以上是关于如何确保在文本字段中仅选择选择器数据的主要内容,如果未能解决你的问题,请参考以下文章

如何将颤动的日期选择器值添加到文本字段?

当用户选择文本字段时,如何显示选择器

iOS 7中文本字段的弹出/模式选择器

在点击文本字段时显示日期选择器

如何设置选择器视图以显示来自多个矩阵选项的数据?

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