首页 > 解决方案 > I can't set the uipickerview datasource and delegate from an outside file

问题描述

I can't seem to set my outside pickerview datasource and delegate to my main view. Is there away I can set it? I want to keep my pickerview in a separate file due to other future views that might use it

This is my custom picker view

final class LenghtPickerView: UIPickerView, UIPickerViewDataSource, UIPickerViewDelegate {

    let feet = Array(4...7)
    let inches = Array(1...11)

    private var textFieldBeginEdited: UITextField?

    var selectedValue: String {
        get {
            return "\(feet[selectedRow(inComponent: 0)]) ft \(inches[selectedRow(inComponent: 0)]) in"
        }
    }

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

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if component == 0 {
            return feet.count
        } else {
            return inches.count
        }
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if component == 0 {
            return String(feet[row])
        } else {
            return String(inches[row])
        }
    }
}

and in my main view declaring it private let lenghtPickerView = LenghtPickerView() also tried private let lenghtPickerView: LenghtPickerView = LenghtPickerView()

cant set the datasource and delegate in order for the data to be render

lenghtPickerView.delegate = self
lenghtPickerView.dataSource = self 

标签: iosswiftxcodeuipickerview

解决方案


如果您尝试在 UIView 类中委托 pickerView,请尝试此操作。

检查 awakeFromNib()功能。

因为我的看起来像这样

override class func awakeFromNib() {
        super.awakeFromNib()
        pickerView.delegate = self //Cant delegate
        pickerView.dataSource = self 
}

几分钟后,我在这里发现了一些不同的东西,我从“覆盖类 func awakeFromNib(){}”中删除了“类”

现在我可以委托它的工作,我的awakeFromNib()函数如下所示:

override func awakeFromNib() {
        super.awakeFromNib()
        pickerView.delegate = self
        pickerView.dataSource = self
}

推荐阅读