Ios 点击字段时未在UIPickerView中填充数据

Ios 点击字段时未在UIPickerView中填充数据,ios,swift,uipickerview,Ios,Swift,Uipickerview,我试图学习如何以编程方式将数据填充到UIPickerView中,而不是将选择器作为主情节提要上的元素。我正在一个项目中练习,这样当我完成这项工作时,我就可以将代码复制到我实际上正在开发的项目中。到目前为止,当我点击季节字段时,屏幕底部会出现一个灰色选择器,但其中没有数据。我有一种感觉,这是因为我尝试填充数据的方式,这是我从将数据填充到选择器视图的教程中获得的,但该教程在主情节提要上有一个选择器元素。我能知道这方面的方向吗?多谢各位 class ViewController: UIViewCont

我试图学习如何以编程方式将数据填充到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实现了
UIPickerViewDeleteGate
UIPickerViewDataSource
方法,但需要将ViewController设置为
UIPickerView
的委托和数据源

将此代码添加到
viewDidLoad

dataPickerView.delegate = self
dataPickerView.dataSource = self
并让您的ViewController类通过更改

class ViewController: UIViewController, UIPickerViewDelegate


记住,必须将类设置为委托/数据源,以符合协议方法。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
    }
    }

您是否设置了数据源和委托
dataPickerView.dataSource=self
dataPickerView.delegate=self
@Audrey感谢您的回复。我想我已经照你说的做了。我添加了UIPickerViewDataSource,例如
类ViewController:UIViewController、UIPickerViewDelegate、UIPickerViewDataSource
@Audrey当我点击字段时,我仍然只得到没有数据的灰色选择器。@Greg我的输入,只是拼图的一半。很高兴它终于对你起作用了。继续学习!非常感谢。那是丢失的一块。我已经将UIPickerViewDataSource添加到类中,但需要.delegate和.dataSource代码。我一直在学习新东西。
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
    }
    }