首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用UIPickerViewDelegate的委派和数据源

不使用UIPickerViewDelegate的委派和数据源
EN

Stack Overflow用户
提问于 2015-10-11 04:04:10
回答 1查看 264关注 0票数 0

我正在尝试为UIPickerView实现一个单独的数据源和委托,这样我的类就可以更好地封装。我有下面的委派,当选择器被移动时它应该会处理:

代码语言:javascript
复制
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]);
    }
}

和这个在选取器中存储数据的数据源:

代码语言:javascript
复制
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
    }

}

这是我的选择器视图,它是在视图控制器中实现的。我将我的数据源和委托指定为我的新类:

代码语言:javascript
复制
class LocationPickerView: UIPickerView, UIPickerViewDelegate {

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.delegate = LocationPickerViewDelegate()
        self.dataSource = LocationPickerViewDataSource()
    }



}

但是,我的数据源和委托从未使用过,选取器为空,这些方法都不会被调用。但是,如果您在视图中实现这些,并将数据源和委托设置为self,则整个过程都会正常工作。有谁知道为什么会发生这种情况吗?我的变量设置错了吗?

如果有人以前见过这种情况,并且知道哪里出了问题,那就太好了。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-10-11 04:12:15

这是关于强引用的。您需要将委托和数据源存储在一个变量中,因为它们是选取器视图本身的weak变量。视图控制器就是这样做的。

只需添加数据源并将变量委托给管理选择器的视图控制器即可。

请参阅文档中的声明:

代码语言:javascript
复制
weak var delegate: UIPickerViewDelegate?
weak var dataSource: UIPickerViewDataSource?
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33058435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档