[英]Changing the population of one picker view depending on which textfield is used
I am new to Swift.我是斯威夫特的新手。 To fill some Textfields in my app, I want to use one picker view which changes its population depending on which textfield I want to fill.
为了填充我的应用程序中的一些文本字段,我想使用一个选择器视图,该视图根据我要填充的文本字段更改其人口。 My Problem is, that the function
textFieldShouldBeginEditing
seems not to work.我的问题是,函数
textFieldShouldBeginEditing
似乎不起作用。 The variable textFieldName
doesn't change its name.变量
textFieldName
不会更改其名称。 Unfortunately all the code I found here is only for Objective-C.不幸的是,我在这里找到的所有代码都只适用于 Objective-C。 I hope you can help me bring this code to work.
我希望你能帮我把这段代码带到工作上。
Here is my code:这是我的代码:
@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]
}
}
You need to called reloadAllComponents
at the end of the textFieldShouldBeginEditing
method.您需要在
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;
}
Replace somePickerViewProperty
with the name of your UIPickerView
outlet.将
somePickerViewProperty
替换为您的UIPickerView
插座的名称。
There also a much simpler way to write your code:还有一种更简单的方法来编写代码:
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]
}
Have you set the UITextField delegate to self
?您是否将 UITextField 委托设置为
self
? I can't see it in the code you provided and the methods such as textFieldShouldBeginEditing
won't be called if the delegate is not set.我在您提供的代码中看不到它,如果未设置委托,则不会调用
textFieldShouldBeginEditing
等方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.