我在代码中放置了2个单独的PickerView。第一个PickerView显示最初选择的数据。
第二个PickerView隐藏在第一个PickerView后面,它的数据量将取决于在第一个PickerView上选择的内容。
选择第一个PikerView后,用户点击“下一步”按钮。这导致隐藏第一个PickerView并显示第二个PickerView。
我可以在第一个选择器上选择数据并将其隐藏,但第二个PickerView仅显示为空白空间,并且可以看到PickerView“选择”线。没有PickerView属性或数据存在。
我正在使用Swift 2并且是新手。非常简单的解释非常感谢!谢谢!!
答案 0 :(得分:0)
我一直试图弄清楚如何根据第一个选择的内容填充第二个PickerView。
我一直在网上,找不到我能理解的简单代码和解释。
我进一步采取了几个步骤并添加了答案,以便我看到其他常见问题。
1)当我不确定第一个选择是什么时,如何将数组传递给选择器?
2)如何更改选择器背景颜色?
3)我是否更改了选择器字体,字体大小,字体颜色?
4)如何在标签内显示第一项而不必移动选择器并返回项目?
所以就是这样!
导入UIKit
类ViewController:UIViewController,UIPickerViewDelegate,UIPickerViewDataSource {
//创建奥特莱斯
@IBOutlet weak var fruitPicker: UIPickerView!
@IBOutlet weak var typePicker: UIPickerView!
@IBOutlet weak var fruitPickerButton: UIButton!
@IBOutlet weak var subFruitButton: UIButton!
@IBOutlet weak var fruitType: UILabel!
@IBOutlet weak var typeType: UILabel!
// Populate the Arrays
var fruit = ["Apple", "Orange", "Melon"]
var apples = ["MacIntosh", "Gala", "Honey Crisp", "Winesap"]
var oranges = ["Navel", "Blood", "Mandarin", "Valencia"]
var melons = ["Cantaloupe", "Honeydew", "Watermelon", "Casaba"]
var selectedArray = []
override func viewDidLoad() {
super.viewDidLoad()
//Set the Delegate for the Pickers
self.fruitPicker.delegate = self
self.fruitPicker.dataSource = self
self.typePicker.delegate = self
self.typePicker.dataSource = self
fruitPickerButton.awakeFromNib()
}
// PickerView代码
// To Specify the Color Font Family and Size of your PickerView Fonts
func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView!) -> UIView
{
var pickerLabel = UILabel()
if pickerView == fruitPicker {
pickerLabel.text = fruit[row]
// Text Color
pickerLabel.textColor = UIColor.blueColor()
// Font Family and Size
pickerLabel.font = UIFont(name: "Chalkboard SE", size: 20)
// Text Alignment within the PickerView
pickerLabel.textAlignment = NSTextAlignment.Center
// PickerView Background Color
pickerLabel.backgroundColor = UIColor(hue: 0.5, saturation: 0.8, brightness:0.7, alpha: 0.5)
// Draw the Label
return pickerLabel
} else if pickerView == typePicker {
pickerLabel.text = selectedArray[row] as! String}
pickerLabel.textColor = UIColor.whiteColor()
pickerLabel.font = UIFont(name: "Chalkboard SE", size: 20)
pickerLabel.textAlignment = NSTextAlignment.Center
pickerLabel.backgroundColor = UIColor(hue: 0.9, saturation: 0.8, brightness:0.7, alpha: 0.5)
return pickerLabel
}
// Number of Columns in each PickerView
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
// Number of Rows in each PickerView
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if pickerView == fruitPicker {
return fruit.count
} else if pickerView == typePicker {
return selectedArray.count
}
return 0
}
// Custom Height for each PickerView Row
func pickerView(pickerView: UIPickerView,
rowHeightForComponent component: Int) -> CGFloat {
return 45
}
// Assign Labels to each individual PickerView Row
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if pickerView == fruitPicker {
return fruit[row]
} else if pickerView == typePicker {
return selectedArray[row] as! String
}
return nil
}
// Determine which Row on which PickerView is Selected
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView == fruitPicker { // If the active PickerView is the fruitPicker do this ...
switch row { // Check to see which Row is Selected
case 0:
selectedArray = apples
fruitType.text = "Apple"
case 1:
selectedArray = oranges
fruitType.text = "Orange"
case 2:
selectedArray = melons
fruitType.text = "Melon"
default:
selectedArray = []
}
typePicker.reloadAllComponents() // VERY IMPORTANT - Reload all of the PickerView Attributes into the typePicker PickerView
typePicker.selectRow(0, inComponent: 0, animated: true) // Reset to first Row and clear the Label Field
typeType.text = ""
} else if pickerView == typePicker { // Determine which Array is to be used to fill the typePicker and show the typePickers Row text in the typeType Label
var item = selectedArray[row]
if selectedArray == apples {
typeType.text = item as! String
} else if selectedArray == oranges {
typeType.text = item as! String
} else if selectedArray == melons {
typeType.text! = item as! String
}
}
}
// Used to allow selection of Apple before the FruitPicker has been activated
@IBAction func fruitPickerButtonPressed(sender: AnyObject) {
fruitType.text = "Apple"
let pickerView = typePicker
selectedArray = apples
typePicker.reloadAllComponents()
fruitPickerButton.hidden = true
}
// Used to allow selection of Macintosh before the TypePicker has been activated
@IBAction func subFruitButtonPressed(sender: AnyObject) {
if selectedArray == apples {
typeType.text = "MacIntosh"
} else if selectedArray == oranges {
typeType.text = "Navel"
} else if selectedArray == melons {
typeType.text = "Cantaloupe"
}
}
}