Kliknięcie pola tekstowego powoduje wyświetlenie klawiatury. Jak to ukryć, gdy użytkownik naciśnie klawisz powrotu?
Kliknięcie pola tekstowego powoduje wyświetlenie klawiatury. Jak to ukryć, gdy użytkownik naciśnie klawisz powrotu?
Odpowiedzi:
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;
W viewDidLoad
oświadczeniu:
[yourTextField setDelegate:self];
Następnie uwzględnij przesłonięcie metody delegata:
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
setDelegate:
przypomnienia. Zdecydowanie zapomniałem, a kod wcześniej nie działał.
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
}
}
Szybko zrób tak:
Najpierw w swoim urządzeniu ViewController
to UITextFieldDelegate
Na przykład.
class MyViewController: UIViewController, UITextFieldDelegate {
....
}
Teraz dodaj delegata do, TextField
w którym chcesz odrzucić klawiaturę po dotknięciu powrotu w viewDidLoad
metodzie 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
}
Spróbuj tego,
[textField setDelegate: self];
Następnie w metodzie delegata textField
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
set delegate of UITextField
i 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 UITextField
i ustawić typ klawisza Return na „Gotowe” w oknie właściwości (polecenie + shift + I).
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()
...
}
Ustaw delegata UITextField
w 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)
}
}
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];
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.return
textFieldShouldReturn
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: