Как добавить действие к ключу возврата UITextField?

У меня есть текстовое поле с кнопками и текстами. когда я нажимаю на текстовое поле, появляется клавиатура, и я могу писать на текстовом поле, и я также могу убрать клавиатуру, нажав на кнопку, добавив:

[self.inputText resignFirstResponder];

Теперь я хочу включить ключ возврата клавиатуры. когда я нажму на клавиатуру, клавиатура исчезнет, ​​и что-то произойдет. Как я могу это сделать?

Ответ 1

Убедитесь, что "self" подписывается на UITextFieldDelegate и инициализирует inputText с помощью:

self.inputText.delegate = self;

Добавьте к "self" следующий метод:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if (textField == self.inputText) {
        [textField resignFirstResponder];
        return NO;
    }
    return YES;
}

Или в Swift:

func textFieldShouldReturn(textField: UITextField) -> Bool {
    if textField == inputText {
        textField.resignFirstResponder()
        return false
    }
    return true
}

Ответ 2

С стилем расширения в swift 3.0

Сначала настройте делегат для вашего текстового поля.

override func viewDidLoad() {
    super.viewDidLoad()
    self.inputText.delegate = self
}

Затем совместим с UITextFieldDelegate в вашем представлении расширения контроллера

extension YourViewController: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        if textField == inputText {
            textField.resignFirstResponder()
            return false
        }
        return true
    }
}

Ответ 3

Хотя остальные ответы работают правильно, я предпочитаю делать следующее:

В viewDidLoad() добавьте

self.textField.addTarget(self, action: #selector(onReturn), for: UIControl.Event.editingDidEndOnExit)

и определить функцию

@IBAction func onReturn() {
    self.textField.resignFirstResponder()
    // do whatever you want...
}

Ответ 4

Swift 4.2

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

@IBOutlet weak var textField: UITextField!


override func viewDidLoad() {
    super.viewDidLoad()

    self.textField.delegate = self

}

// hide key board when the user touches outside keyboard

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    self.view.endEditing(true)
}

// user presses return key

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

}