选择TextField时UIPickerView不显示

问题描述 投票:-1回答:2

我以编程方式编写了以下UIPickerView来提取从JSON中获取的值。

基本上在选择customerTextField时,我应该看到UIPickerView显示正在解析的链接中的值。

相反,我只看到一个键盘出现。

是否存在语法问题,我没有收到任何错误,UIPickerView根本就没有出现。

    import UIKit

class CreateRMA_ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate, UITextFieldDelegate {



        @IBOutlet weak var customerTextField: UITextField!


    var pickerView: UIPickerView!
    var values: [AnyObject] = []

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

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

        return self.values.count

    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {


        let titleRow = (values[row] as? String)!
        return titleRow


    }

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


        if values.count > 0 && values.count >= row{
            self.customerTextField.text = self.values[row] as? String
            self.pickerView.isHidden = true
        }

    }




    func textFieldDidBeginEditing(_ textField: UITextField) {
        //when you select the text field the picker view will be visible

        if(textField == self.customerTextField){
            self.pickerView.isHidden = false
            self.view.endEditing(true)
        }

    }



    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()

    }


        override func viewDidLoad() {
            super.viewDidLoad()

            pickerView = UIPickerView()
            pickerView.dataSource = self
            pickerView.delegate = self


            //get the values from sql/Json
            let url = NSURL(string: "https://www.example.com/test/test.php")

            let data = NSData(contentsOf: url! as URL)
            var tmpValues = try! JSONSerialization.jsonObject(with: data! as Data, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSArray
            tmpValues = tmpValues.reversed() as NSArray
            reloadInputViews()


            for candidate in tmpValues {
                if let cdict = candidate as? NSDictionary {

                    //fullName is the column name in sql/json
                    let names = cdict["customer"]
                    self.values.append(names! as AnyObject)


                }
            }
    }

}
ios swift uipickerview
2个回答
0
投票

ViewDidLoad()你创造了pickerView,将delegatedataSource设为自我,很好。但是你没有做过,你没有添加你的pickerView作为UITextfieldinputView。这就是为什么你没有得到pickerView

这样做

override func viewDidLoad() {
    // do your works 
    pickerView = UIPickerView()
    pickerView.dataSource = self
    pickerView.delegate = self
    customerTextField.inputView = pickerView
}

你必须做另外的事情,删除与UIPickerView中的textfieldDidBeginEditing相关的块,不需要这样做。


0
投票

你必须将textfield的inputView作为pickerView

override func viewDidLoad() {
        super.viewDidLoad()

        pickerView = UIPickerView()
        pickerView.dataSource = self
        pickerView.delegate = self

       customerTextField.inputView = pickerView

  }
© www.soinside.com 2019 - 2024. All rights reserved.