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.

Odpowiedzi:


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

Nie zapomnij ustawić delegata w scenorysie ...

wprowadź opis obrazu tutaj


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.


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()
}

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


To jest teraz poprawna odpowiedź.
Psiloc

3

Wersja Swift korzystająca z UITextFieldDelegate:

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

2

Szybki 5

textField.addTarget(textField, action: #selector(resignFirstResponder), for: .editingDidEndOnExit)

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.