W widoku mam przycisk i pole tekstowe. po kliknięciu pola tekstowego pojawia się klawiatura i mogę pisać w polu tekstowym, a także mogę zamknąć klawiaturę, klikając przycisk, dodając:
[self.inputText resignFirstResponder];
Teraz chcę włączyć klawisz powrotu klawiatury. kiedy nacisnę na klawiaturze klawiatura zniknie i coś się stanie. Jak mogę to zrobić?
ios
objective-c
iphone
swift
uitextfield
razibdeb
źródło
źródło
Odpowiedzi:
Upewnij się, że „self” subskrybuje
UITextFieldDelegate
i inicjalizuje inputText za pomocą:self.inputText.delegate = self;
Dodaj następującą metodę do „siebie”:
- (BOOL)textFieldShouldReturn:(UITextField *)textField { if (textField == self.inputText) { [textField resignFirstResponder]; return NO; } return YES; }
Lub w Swift:
func textFieldShouldReturn(_ textField: UITextField) -> Bool { if textField == inputText { textField.resignFirstResponder() return false } return true }
źródło
Ze stylem rozszerzenia w wersji Swift 3.0
Najpierw skonfiguruj delegata dla swojego pola tekstowego.
override func viewDidLoad() { super.viewDidLoad() self.inputText.delegate = self }
Następnie dostosuj się do
UITextFieldDelegate
rozszerzenia kontrolera widokuextension YourViewController: UITextFieldDelegate { func textFieldShouldReturn(_ textField: UITextField) -> Bool { if textField == inputText { textField.resignFirstResponder() return false } return true } }
źródło
Podczas gdy inne odpowiedzi działają poprawnie, wolę wykonać następujące czynności:
W viewDidLoad () dodaj
self.textField.addTarget(self, action: #selector(onReturn), for: UIControl.Event.editingDidEndOnExit)
i zdefiniuj funkcję
@IBAction func onReturn() { self.textField.resignFirstResponder() // do whatever you want... }
źródło
Użyj mechanizmu Target-Action UIKit dla UIEvent „primaryActionTriggered” wysyłanego z UITextField po dotknięciu przycisku Gotowe na klawiaturze.
textField.addTarget(self, action: Selector("actionMethodName"), for: .primaryActionTriggered)
źródło