如何使用一个 UIViewController 和两个 UIPickerView?

How do I use one UIViewController and two UIPickerViews?

有一些关于此的旧帖子,但我无法让它们工作(我尝试使用下面的标记方法)。我想在 Swift 中使用两个 UIPickerView 在一个 UIViewController 中,但我不知道如何描绘它们:

class ViewController: UIViewController, UIPickerViewDelegate,     UIPickerViewDataSource {



var footballWinner = [
    2015: "Patriots"
]

var hockeyWinner = [
    2015: "TBD"
]

var baseballWinner = [
    2015: "TBD"
]

var baseketballWinner = [
    2015: "TBD"
]



@IBOutlet weak var label: UILabel!


@IBOutlet weak var sportPicker: UIPickerView!

 @IBOutlet weak var yearPicker: UIPickerView!


override func viewDidLoad() {
    super.viewDidLoad()
    yearPicker.delegate = self
    yearPicker.dataSource = self
    sportPicker.delegate = self
    sportPicker.dataSource = self
}

if UIPickerView, didSelectRow == sportPIcker

class YearPickerClass {

    var years = [2015, 2013, 2012, 2011, 2010]

    var selectedYear: Int?

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

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

func pickerView(yearPicker: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    selectedYear = years[row]
}

func pickerView(yearPicker: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
    return "\(years[row])"
}
}

class SportPickerClass {

      var sports = ["Football", "Baseball", "Hockey", "Basketball"]

    var selectedSport: String?

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

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

    func pickerView(yearPicker: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        selectedSport = sports[row]
    }

    func pickerView(yearPicker: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
        return "\(sports[row])"
    }

}

 }

您可以制作一个符合UIPickerViewDataSourceUIPickerViewDelegate(或只是一个或另一个)的任意对象,然后设置delegate and/or dataSource 像这样添加到这个对象(为简单起见,我创建了两个 classes,但是可以很容易地创建一个 class,使用一个以数组作为参数的便利初始化):

class ViewController: UIViewController {

    @IBOutlet weak var firstPickerView: UIPickerView!
    @IBOutlet weak var secondPickerView: UIPickerView!

    let firstPickerData = FirstPickerData()
    let secondPickerData = SecondPickerData()

    override func viewDidLoad() {
        super.viewDidLoad()

        firstPickerView.delegate = firstPickerData
        firstPickerView.dataSource = firstPickerData

        secondPickerView.delegate = secondPickerData
        secondPickerView.dataSource = secondPickerData

    }
}

class FirstPickerData: NSObject, UIPickerViewDataSource, UIPickerViewDelegate {

    let source = ["a", "b", "c", "d", "e"]

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

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

class SecondPickerData: NSObject, UIPickerViewDataSource, UIPickerViewDelegate {

    let source = ["1", "2", "3", "4", "5"]

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

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