点击字段时数据未填充到 UIPickerView 中
Data not populating in UIPickerView when field is tapped
我正在尝试学习如何以编程方式将数据填充到 UIPickerView 中,而不是将选择器作为主情节提要板上的一个元素。我正在一个项目中练习,这样当我完成这项工作时,我可以将代码复制到我实际尝试开发的项目中。到目前为止,当我点击季节字段时,屏幕底部会出现一个灰色的选择器,但其中没有数据。我有一种感觉,这是因为我尝试填充数据的方式,这是我从关于将数据填充到选择器视图的教程中获得的,但是该教程在主情节提要板上有一个选择器元素。我能得到一些指导吗?谢谢。
class ViewController: UIViewController, UIPickerViewDelegate {
@IBOutlet var enterSeason: UITextField!
var dataPickerView = UIPickerView()
var season = ["2013", "2014", "2015"] //multi-season
//var season = ["2015"] //single-season
override func viewDidLoad() {
super.viewDidLoad()
enterSeason.inputView = dataPickerView
//enterSeason.inputView = UIPickerView()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return season.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return season[row] as String
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
var itemSelected = season[row] as String
self.enterSeason.text = itemSelected
}
}
如果您想以编程方式获取数据,则需要再设置一个协议:UIPickerViewDataSource。
第一行应改为:
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
您的 ViewController 实现了 UIPickerViewDelegate
和 UIPickerViewDataSource
方法,但您需要将 ViewController 设置为 UIPickerView
的委托和数据源。
将此代码添加到 viewDidLoad
:
dataPickerView.delegate = self
dataPickerView.dataSource = self
并让您的 ViewController class 通过更改
声明它符合 UIPickerDataSource 协议
class ViewController: UIViewController, UIPickerViewDelegate
到
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource
请记住,您必须将 class 设置为 delegate/datasource 才能符合协议方法。 UITableView、UICollectionView 等也是如此
这里是全部的汇总:
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet var enterSeason: UITextField!
var dataPickerView = UIPickerView()
var season = ["2013", "2014", "2015"] //multi-season
//var season = ["2015"] //single-season
override func viewDidLoad() {
super.viewDidLoad()
enterSeason.inputView = dataPickerView
dataPickerView.delegate = self
dataPickerView.dataSource = self
//enterSeason.inputView = UIPickerView()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return season.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return season[row] as String
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
var itemSelected = season[row] as String
self.enterSeason.text = itemSelected
}
}
我正在尝试学习如何以编程方式将数据填充到 UIPickerView 中,而不是将选择器作为主情节提要板上的一个元素。我正在一个项目中练习,这样当我完成这项工作时,我可以将代码复制到我实际尝试开发的项目中。到目前为止,当我点击季节字段时,屏幕底部会出现一个灰色的选择器,但其中没有数据。我有一种感觉,这是因为我尝试填充数据的方式,这是我从关于将数据填充到选择器视图的教程中获得的,但是该教程在主情节提要板上有一个选择器元素。我能得到一些指导吗?谢谢。
class ViewController: UIViewController, UIPickerViewDelegate {
@IBOutlet var enterSeason: UITextField!
var dataPickerView = UIPickerView()
var season = ["2013", "2014", "2015"] //multi-season
//var season = ["2015"] //single-season
override func viewDidLoad() {
super.viewDidLoad()
enterSeason.inputView = dataPickerView
//enterSeason.inputView = UIPickerView()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return season.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return season[row] as String
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
var itemSelected = season[row] as String
self.enterSeason.text = itemSelected
}
}
如果您想以编程方式获取数据,则需要再设置一个协议:UIPickerViewDataSource。
第一行应改为:
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
您的 ViewController 实现了 UIPickerViewDelegate
和 UIPickerViewDataSource
方法,但您需要将 ViewController 设置为 UIPickerView
的委托和数据源。
将此代码添加到 viewDidLoad
:
dataPickerView.delegate = self
dataPickerView.dataSource = self
并让您的 ViewController class 通过更改
声明它符合 UIPickerDataSource 协议class ViewController: UIViewController, UIPickerViewDelegate
到
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource
请记住,您必须将 class 设置为 delegate/datasource 才能符合协议方法。 UITableView、UICollectionView 等也是如此
这里是全部的汇总:
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet var enterSeason: UITextField!
var dataPickerView = UIPickerView()
var season = ["2013", "2014", "2015"] //multi-season
//var season = ["2015"] //single-season
override func viewDidLoad() {
super.viewDidLoad()
enterSeason.inputView = dataPickerView
dataPickerView.delegate = self
dataPickerView.dataSource = self
//enterSeason.inputView = UIPickerView()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return season.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return season[row] as String
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
var itemSelected = season[row] as String
self.enterSeason.text = itemSelected
}
}