2017-07-05 1 views
1

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?

Antwort

1

Versuchen

func wieghtResponse(){ 
    userInput.inputView = nil // reset your input view for weight input 
    userInput.keyboardType = UIKeyboardType.numberPad 
    userInput.becomeFirstResponder() 
} 
+0

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. –

+0

Von der Spitze meines Kopfes, nicht ganz sicher. Aber Sie könnten versuchen, 'userInput.resignFirstResponder()' am Anfang jeder Ihrer Antwortfunktionen hinzuzufügen? – tbogosia

+0

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? –

Verwandte Themen