2017-02-09 41 views
1

我是Swift新手。要在我的應用程序中填充一些文本框,我想使用一個選擇器視圖,該視圖根據要填充的文本框來更改其人口。我的問題是,功能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] 
    } 
} 

回答

1

您需要在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; 
} 

替換somePickerViewPropertyUIPickerView出口名稱。

還有一個更簡單的編寫代碼的方式:

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] 
} 
+1

乾杯隊友,它解決了。我忘了將UITextfield設置爲委託。但是現在我想用currentData [row]填充Textfield。我已經設置了pickerDidselect功能,但是我不確定如何掌握這個功能.... – AlexVilla147

+0

Ich解決了它! – AlexVilla147

0

有你的UITextField委託設置爲self?我無法在您提供的代碼中看到它,並且如果代理未設置,則不會調用textFieldShouldBeginEditing等方法。

相關問題