首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子类UIPickerView swift

子类UIPickerView swift
EN

Stack Overflow用户
提问于 2015-02-19 17:10:50
回答 3查看 3.6K关注 0票数 1

我正在尝试创建一个UIPickerView子类,以便在多个视图中使用我的选择器。我试图以编程的方式调用我的选择器为inputView of a UITextField,但我想不出如何正确地初始化它。我怀疑这是否是正确的方法,以及我如何才能让它发挥作用。我希望你们中的任何人能帮我。

UIPickerView子类:

代码语言:javascript
复制
import UIKit

 class GroupPicker : UIPickerView, UIPickerViewDelegate, UIPickerViewDataSource{

    var cdm = CoreDataManager()
    var groupObjList : [Group]!

    init() {
       groupObjList = cdm.groupList()
    }

    //MARK: - Delegates and data sources

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return groupObjList.count
    }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
        return groupObjList[row].title
    }

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        println("picked \(groupObjList[row].title)")

    }        
}

如何在视图控制器中调用它:

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()

    groupPicker = GroupViewPicker()  //instead of UIPickerView()
    groupField.inputView = groupPicker
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-19 18:11:22

就像这样简单。

代码语言:javascript
复制
GroupPicker : UIPickerView {

        override init(frame: CGRect){
            super.init(frame: frame)
            self.groupObjList = cdm.groupList()
        } 
}

称之为:

代码语言:javascript
复制
viewDidLoad() {
    groupField.inputView = GroupPicker(frame: CGRectZero)
}
票数 1
EN

Stack Overflow用户

发布于 2015-09-16 11:30:02

您必须重写您的init方法

代码语言:javascript
复制
required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

override init(frame: CGRect) {
    super.init(frame:frame)
    self.delegate = self
    self.dataSource = self
}
票数 2
EN

Stack Overflow用户

发布于 2015-02-19 17:24:03

我想你会想要展示这个情调

如果是这样的话,您可以执行以下操作:

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()

    groupPicker = GroupViewPicker()  //instead of UIPickerView()
    //Send the data you want your picker view to handle.
    groupPicker.groupObjList = dataForPickerView
    self.presentViewController(viewControllerToPresent: groupPicker, animated: , completion: nil)
} 

它应该弹出并正常地呈现出来。

提示:

如果您从未将一个组传递给这个数组(也就是说,您没有像上面所示的那样设置属性),那么这个var groupObjPicker: [Group]!就会崩溃。一个更安全的(取决于你想要实现的ofc)。就是将它声明为像这样的var groupObjList = [Group]()空数组。那么您就知道,如果没有传递给它,那么当调用0时,它至少会返回.count等等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28612545

复制
相关文章

相似问题

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