我正在尝试为UIPickerView实现一个单独的数据源和委托,这样我的类就可以更好地封装。我有下面的委派,当选择器被移动时它应该会处理:
class LocationPickerViewDelegate : NSObject, UIPickerViewDelegate {
let months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
print(months[row]);
}
}和这个在选取器中存储数据的数据源:
class LocationPickerViewDataSource : NSObject, UIPickerViewDataSource {
let months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return months[row]
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return months.count
}
}这是我的选择器视图,它是在视图控制器中实现的。我将我的数据源和委托指定为我的新类:
class LocationPickerView: UIPickerView, UIPickerViewDelegate {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.delegate = LocationPickerViewDelegate()
self.dataSource = LocationPickerViewDataSource()
}
}但是,我的数据源和委托从未使用过,选取器为空,这些方法都不会被调用。但是,如果您在视图中实现这些,并将数据源和委托设置为self,则整个过程都会正常工作。有谁知道为什么会发生这种情况吗?我的变量设置错了吗?
如果有人以前见过这种情况,并且知道哪里出了问题,那就太好了。
谢谢。
发布于 2015-10-11 04:12:15
这是关于强引用的。您需要将委托和数据源存储在一个变量中,因为它们是选取器视图本身的weak变量。视图控制器就是这样做的。
只需添加数据源并将变量委托给管理选择器的视图控制器即可。
请参阅文档中的声明:
weak var delegate: UIPickerViewDelegate?
weak var dataSource: UIPickerViewDataSource?https://stackoverflow.com/questions/33058435
复制相似问题