UIPickerViewDelegate 方法在子类化 UIPickerView 时不起作用



我正在尝试制作一个自定义日期选择器。我已经UIPickerView子类化,并在init(coder:)init(frame:)UIPickerViewDataSourceUIPickerViewDelegate

class XKPickerView: UIPickerView, UIPickerViewDataSource, UIPickerViewDelegate {
override init(frame: CGRect) {
    super.init(frame: frame)
    self.dataSource = self
    self.delegate = self
}
required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)!
    self.dataSource = self
    self.delegate = self
}
(...)
}
但是,在

视图加载时不会调用委托函数pickerView(titleForRow:)。我想,我在init()中缺少一些东西,但是呢?

添加:我正在使用情节提要来构造视图。

添加 2:pickerView 代码还有很多傻瓜,但即使是简单的return "abc"通常也不会起作用,因为函数本身没有被调用(使用 print(( 和调试器仔细检查(。

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, 
                forComponent component: Int) -> String? {
    switch component {
    case 0: // day label
        return String(row + 1)
    case 1: // month label (localized)
        return "0"
    case 2: // century label
        return "0"
    case 3: // year of the century label
        return String(row + 1)
    case 4: // era label (localized)
        return "0"
    default:
        return nil
    }
}

不确定您的尝试发生了什么,但我刚刚这样做了,它没有问题......

class MyPickerView: UIPickerView, UIPickerViewDataSource, UIPickerViewDelegate {
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.dataSource = self
        self.delegate = self
    }
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        self.dataSource = self
        self.delegate = self
    }
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return 3
    }
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return "Row (row)"
    }
}

这就是整个班级。

谢谢大家的回答!我丢失了,我在相应视图控制器的 ViewDidLoad(( 中添加了一个pickerView.delegate = self。多么丢人:)

最新更新