我正在尝试制作一个自定义日期选择器。我已经UIPickerView
子类化,并在init(coder:)
和init(frame:)
中UIPickerViewDataSource
和UIPickerViewDelegate
:
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
。多么丢人:)