jak dodać akcję na klucz powrotu UITextField?

91

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ć?

razibdeb
źródło
1
Możliwy duplikat: stackoverflow.com/questions/4761648/ ...
wquist

Odpowiedzi:

186

Upewnij się, że „self” subskrybuje UITextFieldDelegatei 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
}
Ander
źródło
11

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 UITextFieldDelegaterozszerzenia kontrolera widoku

extension YourViewController: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        if textField == inputText {
            textField.resignFirstResponder()
            return false
        }
        return true
    }
}
Fangming
źródło
4

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...
}
Awaria
źródło
-1

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)
Błażej SLEBODA
źródło