我正在尝试制作自定义日期选择器。我已经将 UIPickerView
子类化,并在 init(coder:)
和 中将其设为
: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
}
(...)
}
但是委托(delegate)函数 pickerView(titleForRow:)
没有在 View 加载时被调用。我想,我在 init()
中遗漏了一些东西,但是什么?
添加:我正在使用 Storyboard构建 View 。
添加 2:pickerView 代码还有很多假人,但即使是简单的 return "abc"
通常也不会起作用,因为函数本身没有被调用(double使用 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)"
}
}
那是整个类(class)。
关于ios - UIPickerViewDelegate 方法在子类化 UIPickerView 时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42817764/