UITextField - zdarzenie przycisku powrotu przechwytywania

101

Jak mogę wykryć, że użytkownik nacisnął przycisk „Return” na klawiaturze podczas edycji UITextField? Muszę to zrobić, aby zamknąć klawiaturę po naciśnięciu przez użytkownika przycisku „Return”.

Dzięki.

Ilya Suzdalnitski
źródło

Odpowiedzi:

212
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return NO;
}

Nie zapomnij ustawić delegata w scenorysie ...

wprowadź opis obrazu tutaj

Ilya Suzdalnitski
źródło
47
Upewnij się, że kontroler widoku jest ustawiony jako delegat pola tekstowego.
zekel
1
Dziękuję Ci. U mnie ustawiłem delegata przez self.yourTextField.delegate = self;. Działa również wiele pól tekstowych.
haxpor
@Praxiteles Można to teraz zrobić w scenorysie bez konieczności delegowania, sprawdź odpowiedź poniżej.
Blake Lockley,
51

Delegacja nie jest wymagana, oto jedna linijka:

- (void)viewDidLoad {
    [textField addTarget:textField
                  action:@selector(resignFirstResponder)
        forControlEvents:UIControlEventEditingDidEndOnExit];
}

Niestety nie możesz tego zrobić bezpośrednio w swoim Storyboard (nie możesz połączyć działań z kontrolką, która je emituje w Storyboard), ale możesz to zrobić za pomocą akcji pośredniczącej.

mxcl
źródło
1
Chcę tylko zaznaczyć, że UIControlEventEditingDidEndOnExitzdarzenie zostanie wysłane tylko wtedy, gdy textFieldShouldReturn:metoda delegata zwróci TAK (bez wcześniejszej rezygnacji z pola tekstowego).
alex-i
Nie musisz wdrażać delegowania. Ale może jeśli będziesz musiał wrócić YESpo tę metodę.
mxcl
9

SWIFT 3.0

override open func viewDidLoad() {
    super.viewDidLoad()    
    textField.addTarget(self, action: #selector(enterPressed), for: .editingDidEndOnExit)
}

w funkcji enterPressed () umieść wszystkie zachowania, których szukasz

func enterPressed(){
    //do something with typed text if needed
    textField.resignFirstResponder()
}
drpawelo
źródło
8

Możesz teraz zrobić to za pomocą storyboardu, używając wysłanego zdarzenia „Did End On Exit”.

W Twoim widoku podklasa kontrolera:

 @IBAction func textFieldDidEndOnExit(textField: UITextField) {
    textField.resignFirstResponder()
}

W swojej planszy dla żądanego pola tekstowego:

wprowadź opis obrazu tutaj

Blake Lockley
źródło
To jest teraz poprawna odpowiedź.
Psiloc
3

Wersja Swift korzystająca z UITextFieldDelegate:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    resignFirstResponder()
    return false
}
Leo Dabus
źródło
2

Szybki 5

textField.addTarget(textField, action: #selector(resignFirstResponder), for: .editingDidEndOnExit)
Przetrząsać
źródło
-1
- (BOOL)textFieldShouldReturn:(UITextField *)txtField 
{
[txtField resignFirstResponder];
return NO;
}

Po kliknięciu przycisku Enter wywoływana jest ta metoda delegata. Możesz przechwycić przycisk powrotu z tej metody delegata.

Mahendra Vishwakarma
źródło