2015-05-22 19 views
8

La funzione textFieldShouldReturn non viene chiamata affatto: non ci sono errori ma la tastiera non risponde affatto.Perché la funzione textFieldShouldReturn non viene chiamata?

Il mio caso è diverso da How to hide keyboard in swift on pressing return key? come nel mio caso non accade nulla e in altri casi si trova in Objective-C.

Ecco il mio codice:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet var textField: UITextField! 

    func textFieldShouldReturn(textField: UITextField) -> Bool { 
     resignFirstResponder() 
     return true 
    } 
} 

textField è una presa per un campo di testo sul mio storyboard. Ho anche provato self.endEditing invece di resignFirstResponder.

risposta

27

Il resto di questa risposta è ancora molto utile, e lascio lì in quanto può potenzialmente aiutare altri askers ... ma qui, ho perso il problema evidente con questo esempio specifico ...

Non stiamo chiamando resignFirstResponder nel campo di testo. Lo chiamiamo sul controller della vista. Abbiamo bisogno di chiamare sul campo di testo, in modo da modificare il codice per assomigliare a questo:

func textFieldShouldReturn(textField: UITextField) -> Bool { 
    textField.resignFirstResponder() 
    return true 
} 

Un UITextField chiamerà solo la proprietà textFieldShouldReturn sull'oggetto che è il suo delegato.

Siamo in grado di risolvere il problema a livello di codice con l'aggiunta di un metodo per impostare viewDidLoad che:

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.textField.delegate = self 
} 

Ma possiamo anche impostare questa funzione tramite lo storyboard in fase di compilazione.

Fare clic destro sul campo di testo per controllare e vedere se il delegato è stata impostata:

enter image description here

Se quel cerchio accanto al delegate è vacante, non abbiamo impostato il delegato per la nostra UITextField ancora.

Per impostare il delegato, passa con il mouse su questa cerchia. Cambierà in un segno più. Ora fai clic e trascina sul controller della vista per il quale vuoi delegare il campo di testo (il controller della vista del quale fa parte il campo di testo).

enter image description here

Quando hai opportunamente agganciato il controller della vista come un delegato, questo menu dovrebbe essere simile a questo:

enter image description here

0

Sono iscritto ad un corso di Swift 4 Udemy, e l'istruttore ha detto di aggiungere la classe UITextFieldDelegate per ViewController oltre a Cntrl - trascinando dal campo di testo al pulsante ViewController e selezionando delegato.

importazione UIKit

class ViewController: UIViewController, UITextFieldDelegate { 

    func textFieldShouldReturn(textField: UITextField) -> Bool { 
     textField.resignFirstResponder() 
     return true 
    } 
} 
Problemi correlati