具有多个文本字段输入视图的多个选取器视图 Swift

Posted

技术标签:

【中文标题】具有多个文本字段输入视图的多个选取器视图 Swift【英文标题】:Multiple pickerviews with multiple textfield inputviews Swift 【发布时间】:2014-10-21 13:44:50 【问题描述】:

我一直在论坛中搜索,但没有任何帮助。 我在一个视图控制器中使用 4 个文本字段,对于每个文本字段,我使用单独的 pickerView 作为 textFields (4pickers) 的 inputViews。

当我点击第一个 textField 时,pickerView1 成功出现,并且 textfield 显示数据,但是当我点击第二个、第三个和第四个 textfield 时,出现第一个 pickerView。 我怀疑错误在于 inputView 声明。

如果您能帮助在 pickerView 中添加“完成”按钮,我将不胜感激。

我的代码:

class ViewController1: UIViewController, UIPickerViewDelegate


    @IBOutlet var pickerView1: UIPickerView!
    @IBOutlet var pickerView2: UIPickerView!
    @IBOutlet var pickerView3: UIPickerView!
    @IBOutlet var pickerView4: UIPickerView!

    @IBOutlet var textField1: UITextField!
    @IBOutlet var textField2: UITextField!
    @IBOutlet var textField3: UITextField!
    @IBOutlet var textField4: UITextField!

    var hazards = ["a","b", "c"]
    var reasons = ["d", "e", "f"]
    var site = ["v","h","i","j"]
    var line = ["k", "l","m", "n"]

    override func viewDidLoad() 

        super.viewDidLoad()
        pickerView1 = UIPickerView()
        pickerView2 = UIPickerView()
        pickerView3 = UIPickerView()
        pickerView4 = UIPickerView()
        pickerView1.delegate = self
        pickerView2.delegate = self
        pickerView3.delegate = self
        pickerView4.delegate = self

        self.textField1.inputView = self.pickerView1;
        self.textField2.inputView = self.pickerView2;
        self.textField3.inputView = self.pickerView3;
        self.textField4.inputView = self.pickerView4;
    

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int  
        return 1
    

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 

        if pickerView.tag == 0 
            return hazards.count
         else if pickerView.tag == 1 
            return reasons.count
         else if pickerView.tag == 2 
            return  site.count
         else if  pickerView.tag == 3 
            return line.count
        
        return 1
    

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! 

        if pickerView.tag == 0 
            return hazards[row]
         else if pickerView.tag == 1 
            return reasons[row]
         else if pickerView.tag == 2 
            return site[row]
         else if pickerView.tag == 3 
            return line[row]
        

        return ""
    

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)  

        if pickerView.tag == 0 
            textField1.text = hazards[row]
         else if pickerView.tag == 1 
            textField2.text = reasons[row]
         else if pickerView.tag == 2 
            textField3.text = site[row]
         else if pickerView.tag == 3 
            textField4.text = line[row]
        
    

【问题讨论】:

这里是开始添加完成按钮的地方:blog.swierczynski.net/2010/12/… 【参考方案1】:

您正在使用选择器视图的tag 属性来决定哪个数组是给定选择器视图的数据源,但您最初没有设置标签。 tag 默认为零,因此所有四个选择器视图都显示相同的数据。实例化您的选择器视图后,添加以下内容:

pickerView1.tag = 0
pickerView2.tag = 1
pickerView3.tag = 2
pickerView4.tag = 3

【讨论】:

我已经使用 xcode 为 pickerviews 设置了标签,我确信它们会显示不同的数据,就像我删除 inputview 调用一样,并在页面上显示选择器,它们会显示不同的数据。该教程也在目标 C 中,我不明白。 您的意思是在情节提要中设置标签吗?当您创建新的选择器视图(即,使用此代码:pickerView1 = UIPickerView())时,该设置不适用。 谢谢!!!有效!我在属性检查器中设置了标签,但没有在代码中设置。 你能帮我谈谈如何将教程中的代码转换为完成按钮吗??

以上是关于具有多个文本字段输入视图的多个选取器视图 Swift的主要内容,如果未能解决你的问题,请参考以下文章

如何在同一视图中使用具有不同数据源的多个选取器视图?

如何在一个视图中将一个 UIPickerView 用于多个文本字段?

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

如何从具有多个视图的 ListView 中的 EditText 获取文本?

SwiftUI Picker 多个错误,核心数据,布局

文本字段创建操作而非出口