我正在尝试创建一个UIPickerView子类,以便在多个视图中使用我的选择器。我试图以编程的方式调用我的选择器为inputView of a UITextField,但我想不出如何正确地初始化它。我怀疑这是否是正确的方法,以及我如何才能让它发挥作用。我希望你们中的任何人能帮我。
UIPickerView子类:
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)")
}
}如何在视图控制器中调用它:
override func viewDidLoad() {
super.viewDidLoad()
groupPicker = GroupViewPicker() //instead of UIPickerView()
groupField.inputView = groupPicker
}发布于 2015-02-19 18:11:22
就像这样简单。
GroupPicker : UIPickerView {
override init(frame: CGRect){
super.init(frame: frame)
self.groupObjList = cdm.groupList()
}
}称之为:
viewDidLoad() {
groupField.inputView = GroupPicker(frame: CGRectZero)
}发布于 2015-09-16 11:30:02
您必须重写您的init方法
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
}发布于 2015-02-19 17:24:03
我想你会想要展示这个情调
如果是这样的话,您可以执行以下操作:
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等等。
https://stackoverflow.com/questions/28612545
复制相似问题