UIPickerview 不会根据不同 uitextfield 的值从特定数组填充

UIPickerview wont populate from a specific array based on value of different uitextfield

我有一个文本字段,它根据福特、彼得比尔特等卡车制造商的 pickerview 设置其值。它工作正常,但我试图根据下一个文本字段的值填充正确的数组,并且它没有填充任何东西。

我已经尝试在下面的 pickerview 函数中这样做:

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

    if pickerView.tag == 0 {

        return yearArray.count
    } else if pickerView.tag == 1 {

        return truckMakeArray.count
    } else if pickerView.tag == 2 {

        if truckMake.text == "Ford"{

            return fordModelArray.count}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {

    if pickerView.tag == 0 {

        return yearArray[row]
    } else if pickerView.tag == 1 {

        return truckMakeArray[row]
    } else if pickerView.tag == 2{

        if truckMake.text == "Ford"{

            return fordModelArray[row]
        }

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

    if pickerView.tag == 0 {

        truckYear.text = yearArray[row]
    } else if pickerView.tag == 1 {

        truckMake.text = truckMakeArray[row]
    } else if pickerView.tag == 2 {

        if truckMake.text == "Ford"{

            truckModel.text = fordModelArray[row]
        }

问题是我将 println() 放在那些比较 truckMake.text 的语句中,并直接跳过它。

所以我尝试的另一种方法是按以下方式进行:

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {

    if textField.tag == 5 {
        yearPicker.hidden = false
        truckMakePicker.hidden = true
        truckModelPicker.hidden = true

        pickerView.hidden = false
        self.pickerView.frame = CGRect(x: 0, y: scrollView.contentOffset.y + self.view.frame.size.height - 250, width: self.view.frame.width, height: 250)

        return false
    } else if textField.tag == 6 {
        yearPicker.hidden = true
        truckMakePicker.hidden = false
        truckModelPicker.hidden = true

        pickerView.hidden = false
        self.pickerView.frame = CGRect(x: 0, y: scrollView.contentOffset.y + self.view.frame.size.height - 250, width: self.view.frame.width, height: 250)

        return false
    } else if textField.tag == 7 {

        if truckMake.text == "Mack"{

            println("text method")

            modelArray = mackModelArray
        }

        yearPicker.hidden = true
        truckMakePicker.hidden = true
        truckModelPicker.hidden = false

        pickerView.hidden = false
        self.pickerView.frame = CGRect(x: 0, y: scrollView.contentOffset.y + self.view.frame.size.height - 250, width: self.view.frame.width, height: 250)

        return false
    } else {

        return true
    }
}

这背后的逻辑是我创建了一个字符串类型的空数组,我根据该值将数组设置为正确的数组,只是它没有设置它。但是这次我确实得到了 println() 里面打印 "text method".

我已经三次检查了 pickerviews 和文本字段上的标签号,代表都为 pickerviews 和数据源设置了。

也许有人可以教我如何根据卡车的品牌更改模型。

我明白了,这些 pickerview 函数只会在加载时调用,因此如果您进行任何比较,则必须重新加载 pickerview 组件。这是我所做的:

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {

    if textField.tag == 5 {
        yearPicker.hidden = false
        truckMakePicker.hidden = true
        truckModelPicker.hidden = true

        pickerView.hidden = false
        self.pickerView.frame = CGRect(x: 0, y: scrollView.contentOffset.y + self.view.frame.size.height - 250, width: self.view.frame.width, height: 250)

        return false
    } else if textField.tag == 6 {
        yearPicker.hidden = true
        truckMakePicker.hidden = false
        truckModelPicker.hidden = true

        pickerView.hidden = false
        self.pickerView.frame = CGRect(x: 0, y: scrollView.contentOffset.y + self.view.frame.size.height - 250, width: self.view.frame.width, height: 250)

        return false
    } else if textField.tag == 7 {

        yearPicker.hidden = true
        truckMakePicker.hidden = true
        truckModelPicker.hidden = false

        truckModelPicker.reloadAllComponents()

        pickerView.hidden = false
        self.pickerView.frame = CGRect(x: 0, y: scrollView.contentOffset.y + self.view.frame.size.height - 250, width: self.view.frame.width, height: 250)

        return false
    } else {

        return true
    }
}

textField.tag == 7 是我在触摸文本字段时为该选择器重新加载数据的地方。现在说得通了,我意识到这一点的唯一方法是当 pickerview 函数不再调用它们自己时。