Jak ukryć klawiaturę po naciśnięciu klawisza Return w UITextField?

148

Kliknięcie pola tekstowego powoduje wyświetlenie klawiatury. Jak to ukryć, gdy użytkownik naciśnie klawisz powrotu?

aden
źródło
13
Zaletą przepełnienia stosu jest to, że udzielono już odpowiedzi na WIELE pytań, zwłaszcza tych prostych. Dlatego najpierw poszukaj odpowiedzi, zanim zapytasz. Widzisz, to proste: stackoverflow.com/search?q=iphone+hide+keyboard
Felixyz
To jest podklasa UITextfield, która dynamicznie zmienia UIReturnKey zgodnie z warunkiem tekstu / ciągu: github.com/codeinteractiveapps/OBReturnKeyTextField
CodeInteractive

Odpowiedzi:

286

Najpierw ustaw delegata pliku dla UITextField

@interface MYLoginViewController () <UITextFieldDelegate>

@end

Następnie dodaj tę metodę do swojego kodu.

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

Dodaj także self.textField.delegate = self;

Saurabh
źródło
1
Ciekawe, dlaczego <UITextFieldDelegate> nie jest konieczne? Zwykle w takim przypadku zobaczysz ostrzeżenie.
pixelfreak
7
jeśli zrobisz plik delegata za pomocą interfejsu Builder następnie <UITextFieldDelegate> nie jest konieczne w pliku .h ..
Saurabh
1
dodanie <UITextFieldDelegate> w pliku .h i ustawienie delegata w viewdidload [yourTextField setDelegate: self]; zakończy to!
Umit Kaya,
@Saurabh Co jest takiego specjalnego w VC utworzonym przez storyboard?
Paul Brewczyński
62

W viewDidLoadoświadczeniu:

[yourTextField setDelegate:self];

Następnie uwzględnij przesłonięcie metody delegata:

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}
oscar castellon
źródło
6
+1 dla setDelegate:przypomnienia. Zdecydowanie zapomniałem, a kod wcześniej nie działał.
piperchester,
2
Czy nie powinno to być pole tekstowe, a nie yourTextField, gdy jest przekazywane?
Clive Jefferies,
to sposób na powiedzenie, który deklaruje delegata swojego tekstu Pole
oscar castellon
1
<UITextFieldDelegate> powinno znajdować się w pliku .h, w przeciwnym razie pojawi się ostrzeżenie!
Umit Kaya,
22

Spróbuj tego w Swift ,

Krok 1: Ustaw delegata jako siebietextField

textField.delegate = self

Krok 2: Dodaj to UITextFieldDelegate poniżej deklaracji klasy,

extension YourClassName: UITextFieldDelegate {
    func textFieldShouldReturn(textField: UITextField) -> Bool {
         textField.resignFirstResponder()
        return true
    }
}
Mohammad Zaid Pathan
źródło
14

Szybko zrób tak:
Najpierw w swoim urządzeniu ViewControllerto UITextFieldDelegate Na przykład.

class MyViewController: UIViewController, UITextFieldDelegate {
....
}

Teraz dodaj delegata do, TextFieldw którym chcesz odrzucić klawiaturę po dotknięciu powrotu w viewDidLoadmetodzie jak poniżej lub w miejscu, w którym ją inicjujesz. Np.

override func viewDidLoad() {

    super.viewDidLoad()   
    myTextField.delegate = self
}

Teraz dodaj tę metodę.

func textFieldShouldReturn(textField: UITextField) -> Bool {

    textField.resignFirstResponder()
    return true
}
Homam
źródło
1
Drugi krok nie jest konieczny, jeśli ustawisz delegata w IB.
hris.to
Pojawia się (w obecnych wersjach Swift) podkreślenie przed „textField:”
Bryce Sandlund
2

Spróbuj tego,

[textField setDelegate: self];

Następnie w metodzie delegata textField

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}
Vineesh TP
źródło
to nie jest najlepsza praktyka.
orafaelreis
wymaga UITextFieldDelegate w definicji interfejsu.
Alp Altunel
@AlpAltunel: Dzięki za komentarz, to było 4 lata temu.
Vineesh TP
1

set delegate of UITextFieldi over ride textFieldShouldReturn, w tej metodzie po prostu napisz następujące dwa wiersze:

[textField resignFirstResponder];
return YES;

Otóż ​​to. Przed napisaniem kodu nie zapomnij ustawić delegata a UITextFieldi ustawić typ klawisza Return na „Gotowe” w oknie właściwości (polecenie + shift + I).

Matryca
źródło
1

Możesz połączyć "Primary Action Triggered" (kliknij prawym przyciskiem na UITextField) z IBAction i możesz zrezygnować z pierwszej odpowiedzi (bez delegowania). Przykład (Swift 4):

@IBAction func textFieldPrimaryAction(_ sender: UITextField) {
    sender.resignFirstResponder()
    ...
}
Ferenc Kiss
źródło
Preferowany sposób korzystania ze scenorysów.
lal
1

Szybki 4

Ustaw delegata UITextFieldw widoku kontrolera field.delegate = self, a następnie:

extension ViewController: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        // don't force `endEditing` if you want to be asked for resigning
        // also return real flow value, not strict, like: true / false
        return textField.endEditing(false)
    }
}
dimpiax
źródło
jak poradziłbyś sobie z żądaniem, aby użytkownicy przechodzili tabulatorem do następnego pola tekstowego po naciśnięciu klawisza Return, aż do ostatniego, a następnie rezygnuje? Również w SwiftUI.
Learn2Code
@ Learn2Code stwórz managera, zbieraj pola tekstowe i łańcuch, ostatni wyzwoli funkcję zakończenia.
dimpiax
1

Jeśli chcesz ukryć klawiaturę dla określonej klawiatury, użyj opcji [self.view resignFirstResponder]; Jeśli chcesz ukryć klawiaturę przed wyświetlaniem, użyj[self.view endEditing:true];

Graycodder
źródło
0
[textField resignFirstResponder];

Użyj tego

DURGESH
źródło
0

Ok, myślę, że dla nowicjusza sytuacja może być nieco zagmatwana. Myślę, że prawidłowa odpowiedź to połączenie wszystkich powyższych, przynajmniej w Swift4.

Utwórz rozszerzenie lub użyj ViewController, w którym chcesz tego użyć, ale pamiętaj, aby zaimplementować UITextFieldDelegate. Ze względu na możliwość ponownego wykorzystania okazało się, że łatwiej jest użyć rozszerzenia:

extension UIViewController : UITextFieldDelegate {
    ...
}

ale alternatywa również działa:

class MyViewController: UIViewController {
    ...
}

Dodaj metodę textFieldShouldReturn (w zależności od poprzedniej opcji, w rozszerzeniu lub w ViewController)

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

W metodzie viewDidLoad ustaw delegata pola tekstowego na siebie

@IBOutlet weak var myTextField: UITextField!
...

override func viewDidLoad() {
    ..
    myTextField.delegte = self;
    ..
}

To powinno być wszystko. Teraz, po naciśnięciu powinien być nazywany.returntextFieldShouldReturn

Alex
źródło
0

Zdefiniuj tę klasę, a następnie ustaw pole tekstowe tak, aby korzystało z tej klasy, a to zautomatyzuje całą ukrytą klawiaturę po automatycznym naciśnięciu klawisza return.

class TextFieldWithReturn: UITextField, UITextFieldDelegate
{

    required init?(coder aDecoder: NSCoder) 
    {
        super.init(coder: aDecoder)
        self.delegate = self
    }

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

}

Następnie wszystko, co musisz zrobić w scenorysie, to ustawić pola do użycia klasy:

wprowadź opis obrazu tutaj

iphaaw
źródło