如何使用一个 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])"
}
}
}
您可以制作一个符合UIPickerViewDataSource
和UIPickerViewDelegate
(或只是一个或另一个)的任意对象,然后设置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]
}
}
有一些关于此的旧帖子,但我无法让它们工作(我尝试使用下面的标记方法)。我想在 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])"
}
}
}
您可以制作一个符合UIPickerViewDataSource
和UIPickerViewDelegate
(或只是一个或另一个)的任意对象,然后设置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]
}
}