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 函数不再调用它们自己时。
我有一个文本字段,它根据福特、彼得比尔特等卡车制造商的 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 函数不再调用它们自己时。