Swift Code - 多个PickerViews

时间:2015-12-13 20:06:24

标签: uipickerview

我在代码中放置了2个单独的PickerView。第一个PickerView显示最初选择的数据。

第二个PickerView隐藏在第一个PickerView后面,它的数据量将取决于在第一个PickerView上选择的内容。

选择第一个PikerView后,用户点击“下一步”按钮。这导致隐藏第一个PickerView并显示第二个PickerView。

我可以在第一个选择器上选择数据并将其隐藏,但第二个PickerView仅显示为空白空间,并且可以看到PickerView“选择”线。没有PickerView属性或数据存在。

我正在使用Swift 2并且是新手。非常简单的解释非常感谢!谢谢!!

1 个答案:

答案 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"


    }
}

}