Ich habe zwei Schaltflächen erstellt. Einer rief Weight
und der andere Age
. Beide dieser Schaltflächen legen dasselbe UITextField als einen Erstbeantworter fest. Wenn jedoch die Schaltfläche Weight
berührt wird, wird der Tastaturtyp zu einem Ziffernblock; Wenn die Schaltfläche Age
berührt wird, wird der Tastaturtyp zu einem UIPickerViewer. Hier ist der Code unter:Eingabeansicht ändert sich nicht für UITextField
@IBOutlet var weightButton: UIButton!
@IBOutlet var ageButton: UIButton!
@IBOutlet var userInput: UITextField!
let agePicker = UIPickerView()
let ageAsString = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18"]
var selectedAge: Double?
override func viewDidLoad() {
super.viewDidLoad()
createAgePicker()
}
//ButtonsClicked
@IBAction func weightSearch(_ sender: Any) {
wieghtResponse()
}
@IBAction func ageSearch(_ sender: Any) {
ageResponse()
}
func userInputResponse() {
userInput.inputView = nil
if weightButton.isTouchInside {
userInput.inputView = nil
userInput.keyboardType = UIKeyboardType.numberPad
userInput.becomeFirstResponder()
} else if ageButton.isTouchInside {
userInput.inputView = nil
userInput.inputView = agePicker
userInput.becomeFirstResponder()
}
//CreateAgePicker
func createAgePicker() {
agePicker.delegate = self
agePicker.backgroundColor = .white
agePicker.tintColor = .clear
}
//Components
@available(iOS 2.0, *)
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
//Rows
@available(iOS 2.0, *)
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return ageAsString.count
}
//Labels
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return ageAsString[row]
}
Das Problem, das ich habe ist, dass wenn ich auf der Age
Taste, die Picker Ansicht Lasten. Wenn ich jedoch auf die Schaltfläche Weight
klicke, wird die Eingabeansicht nicht wieder auf ein Nummernfeld zurückgesetzt und bleibt als Auswahlfenster erhalten. Irgendein Rat?
perfekt danke. Das hat es sofort gelöst. Ich habe jedoch ein anderes Problem. Wenn ich auf eine der Schaltflächen klicke, muss ich die Suche abbrechen, bevor ich auf eine andere Schaltfläche klicken kann. Das heißt, ich klicke auf den 'Weight' Button und der Ziffernblock lädt, klick auf den' Age' Button hat keinen Effekt. Kann ich das irgendwie beheben? Danke nochmal für deine Hilfe. –
Von der Spitze meines Kopfes, nicht ganz sicher. Aber Sie könnten versuchen, 'userInput.resignFirstResponder()' am Anfang jeder Ihrer Antwortfunktionen hinzuzufügen? – tbogosia
Ich habe tatsächlich die Benutzerantwortfunktionen bearbeitet und sie in eine einzige Funktion gebracht. Ich habe versucht den 'userInput.resignFirstResponder' und es funktioniert nicht. Irgendwas anderes sollte ich versuchen? –