簡體   English   中英

根據使用的文本字段更改一個選擇器視圖的數量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM