首页 > 解决方案 > PickerView 将自行重新加载错误行为 Swift 4.2

问题描述

我的 pickerView 运行良好,但不知道为什么在重建项目文件夹后会出现错误行为。

组件 [0] 将自行重新加载,但我没有为它编写任何代码!

在此处输入图像描述

以下是代码:

DropdownListExtension.swift

extension UITextField: UITextFieldDelegate {
    func loadAddressDropdownData(data: [String], zipField: UITextField!) {
        self.inputView = AddressPickerView(pickerData: data, cityField: self, zipField: zipField)

        // ToolBar
        let toolBar = UIToolbar()

        // Adding Button ToolBar
        // ...Init ToolBar
        self.inputAccessoryView = toolBar
    }

    @objc func doneClick() {
        self.resignFirstResponder()
    }
    @objc func cancelClick() {
        self.resignFirstResponder()
    }
}

AddressPickerView.swift

class AddressPickerView : UIPickerView, UIPickerViewDataSource, UIPickerViewDelegate {
    var pickerData : [String]!
    var pickerTextField : UITextField!
    var zipTextField: UITextField!
    var selectedRow = 0
    var selectedCity = "臺北市"

    init(pickerData: [String], cityField: UITextField, zipField: UITextField) {
        super.init(frame: CGRect.zero)
        self.pickerData = pickerData
        self.pickerTextField = cityField
        self.zipTextField = zipField
        self.delegate = self
        self.dataSource = self
        DispatchQueue.main.async{
            if pickerData.count > 0 {
                self.pickerTextField.text = self.pickerData[0]
            } else {
                self.pickerTextField.text = nil
            }
        }
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

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

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if component == 0{
            return pickerData.count
        }else {
            switch selectedCity{
            //...
            default:
                return 0
            }
        }
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if component == 0{
            return pickerData[row]
        } else {
            switch selectedCity{
            //...
            default:
                return ""
            }

        }
    }
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        print(component)
        if component == 0 {
            pickerTextField.text = pickerData[row]
            selectedRow = row
            selectedCity = pickerData[row]
            pickerView.reloadComponent(1)
        }else {
            switch selectedCity{
            case "臺北市":
            zipTextField.text = taipei[row]
            case "基隆市":
            zipTextField.text = keelung[row]
            //...
            default:
                return print("")
            }
        }
    }
}

请帮我解决它,我花了将近 3 天,但仍然无法弄清楚问题...

标签: swiftswift4.2

解决方案


推荐阅读