[英]Changing the population of one picker view depending on which textfield is used
我是斯威夫特的新手。 為了填充我的應用程序中的一些文本字段,我想使用一個選擇器視圖,該視圖根據我要填充的文本字段更改其人口。 我的問題是,函數textFieldShouldBeginEditing
似乎不起作用。 變量textFieldName
不會更改其名稱。 不幸的是,我在這里找到的所有代碼都只適用於 Objective-C。 我希望你能幫我把這段代碼帶到工作上。
這是我的代碼:
@IBOutlet weak var Stadt: UITextField!
@IBOutlet weak var Untergrund: UITextField!
@IBOutlet weak var Groesse: UITextField!
@IBOutlet weak var AnzToreKoerbe: UITextField!
@IBOutlet weak var Platzart: UITextField!
var UntergrundArray = ["Kunstrasen Sand", "Kunstrasen Granulat", "Rasen", "Tartan", "Teer"]
var StadtArray = ["Norderstedt", "Hamburg", "Berlin", "München"]
var GroesseArray = ["1 vs 1", "2 vs 2", "3 vs 3", "4 vs 4", "5 vs 5", "6 vs 6", "7 vs 7"]
var AnzTorKoerbe = ["1", "2", "3", "4"]
var Art = ["Fußball", "Basketball"]
var textFieldName = "Stadt1"
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool{
if textField.tag == 1{
textFieldName = "Stadt1"
}else if textField.tag == 2{
textFieldName = "Untergrund1"
}else if textField.tag == 3 {
textFieldName = "Groesse1"
}else if textField.tag == 4 {
textFieldName = "AnzToreKoerbe1"
}else if textField.tag == 5 {
textFieldName = "Platzart1"
}
return true;
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if (textFieldName.isEqual("Stadt1")) {
return StadtArray.count
}else if (textFieldName.isEqual("Untergrund1")) {
return UntergrundArray.count
}else if (textFieldName.isEqual("Groesse1")) {
return GroesseArray.count
}else if (textFieldName.isEqual("AnzToreKoerbe1")) {
return AnzTorKoerbe.count
}else {
return Art.count
}
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if (textFieldName.isEqual("Stadt1")) {
return StadtArray [row]
}else if (textFieldName.isEqual("Untergrund1")) {
return UntergrundArray [row]
}else if (textFieldName.isEqual("Groesse1")) {
return GroesseArray [row]
}else if (textFieldName.isEqual("AnzToreKoerbe1")) {
return AnzTorKoerbe [row]
}else {
return Art [row]
}
}
您需要在textFieldShouldBeginEditing
方法的末尾調用reloadAllComponents
。
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool{
if textField.tag == 1{
textFieldName = "Stadt1"
}else if textField.tag == 2{
textFieldName = "Untergrund1"
}else if textField.tag == 3 {
textFieldName = "Groesse1"
}else if textField.tag == 4 {
textFieldName = "AnzToreKoerbe1"
}else if textField.tag == 5 {
textFieldName = "Platzart1"
}
somePickerViewProperty.reloadAllComponents()
return true;
}
將somePickerViewProperty
替換為您的UIPickerView
插座的名稱。
還有一種更簡單的方法來編寫代碼:
var UntergrundArray = ["Kunstrasen Sand", "Kunstrasen Granulat", "Rasen", "Tartan", "Teer"]
var StadtArray = ["Norderstedt", "Hamburg", "Berlin", "München"]
var GroesseArray = ["1 vs 1", "2 vs 2", "3 vs 3", "4 vs 4", "5 vs 5", "6 vs 6", "7 vs 7"]
var AnzTorKoerbe = ["1", "2", "3", "4"]
var Art = ["Fußball", "Basketball"]
var currentData = StadtArray
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool{
if textField.tag == 1{
currentData = StadtArray
}else if textField.tag == 2{
currentData = UntergrundArray
}else if textField.tag == 3 {
currentData = GroesseArray
}else if textField.tag == 4 {
currentData = AnzTorKoerbe
}else if textField.tag == 5 {
currentData = Art
}
somePickerViewProperty.reloadAllComponents()
return true;
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return currentData.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return currentData[row]
}
您是否將 UITextField 委托設置為self
? 我在您提供的代碼中看不到它,如果未設置委托,則不會調用textFieldShouldBeginEditing
等方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.