【问题标题】:Dismiss pickerView and open the corresponding one when a user taps on a different textField当用户点击不同的 textField 时,关闭 pickerView 并打开相应的pickerView
【发布时间】:2019-12-19 06:29:03
【问题描述】:

我在一个视图中有多个文本字段,其中输入视图设置为pickerView,但是根据文本字段,应该出现不同数量的选择行。当您在选择器视图外部单击然后单击下一个 textField 时,这可以正常工作,但是当您单击下一个 textField 时会导致崩溃(这是因为 pickerView 不会更改,因此索引超出范围)。感谢您的帮助!

在外面点击时关闭pickerView(如果点击另一个文本字段则不做任何事情):

self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:))))

当我说不同的文本字段显示不同数量的行时,我的意思是:

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if ticketOneTextField.isFirstResponder == true {
            if shownEvent?.ticketTypeOnePrice == "0.00" {
                return 2
            } else {
                return 11
            }
        } else if ticketTwoTextField.isFirstResponder == true {
            if shownEvent?.ticketTypeTwoPrice == "0.00" {
                return 2
            } else {
                return 11
            }
        } else if ticketThreeTextField.isFirstResponder == true {
            if shownEvent?.ticketTypeThreePrice == "0.00" {
                return 2
            } else {
                return 11
            }
        } else {
            return 2
        }
    }

【问题讨论】:

    标签: ios swift uitextfield uipickerview


    【解决方案1】:

    在 viewDidLoad() 中添加

    当用户开始编辑时调用下面的函数。

    textField.addTarget(self, action:#selector(textDidBeginEditing(_:)), forControlEvents: UIControlEvents.EditingDidBegin)
    

    然后实现这个:

        func textDidBeginEditing(sender:UITextField) -> Void
        {
           if sender == ticketOneTextField {
                 //show pickerview
           } 
           else if sender == ticketOneTextField {
                 //show pickerview
           } 
           else if sender == ticketOneTextField {
                 //show pickerview
           } 
    }
    
    // this pickerview delegate is called when user selects a row.
         optional func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
              //after user selects the value end the editing
              self.view.endEditing(true)
        }
    

    【讨论】:

      猜你喜欢
      • 2016-04-24
      • 1970-01-01
      • 2015-10-17
      • 1970-01-01
      • 2017-08-18
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多