子类 UIPickerView swift
Subclass UIPickerView swift
我正在尝试创建 UIPickerView
的子类,以便我可以在多个视图中使用我的选择器。我正在尝试以编程方式将我的选取器调用为 UITextField
的 inputView
,但我不知道如何正确初始化它。我怀疑这是否是正确的方法以及如何让它发挥作用。希望大家能帮帮我。
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
}
我想你会想展示这个 modally?
如果是这样,您可以执行以下操作:
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]!
将会崩溃。更安全的方法(取决于您要实现的目标)是将其声明为像 var groupObjList = [Group]()
这样的空数组。然后你知道如果没有传递给它,它至少会 return 0
当 .count
被调用时等等
像这样很容易。
GroupPicker : UIPickerView {
override init(frame: CGRect){
super.init(frame: frame)
self.groupObjList = cdm.groupList()
}
}
称呼它:
viewDidLoad() {
groupField.inputView = GroupPicker(frame: CGRectZero)
}
您必须重写您的 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
}
我正在尝试创建 UIPickerView
的子类,以便我可以在多个视图中使用我的选择器。我正在尝试以编程方式将我的选取器调用为 UITextField
的 inputView
,但我不知道如何正确初始化它。我怀疑这是否是正确的方法以及如何让它发挥作用。希望大家能帮帮我。
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
}
我想你会想展示这个 modally?
如果是这样,您可以执行以下操作:
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]!
将会崩溃。更安全的方法(取决于您要实现的目标)是将其声明为像 var groupObjList = [Group]()
这样的空数组。然后你知道如果没有传递给它,它至少会 return 0
当 .count
被调用时等等
像这样很容易。
GroupPicker : UIPickerView {
override init(frame: CGRect){
super.init(frame: frame)
self.groupObjList = cdm.groupList()
}
}
称呼它:
viewDidLoad() {
groupField.inputView = GroupPicker(frame: CGRectZero)
}
您必须重写您的 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
}