UITextField - захват события кнопки возврата

101

Как я могу определить, когда пользователь нажал кнопку «возврат» на клавиатуре при редактировании UITextField? Мне нужно сделать это, чтобы закрыть клавиатуру, когда пользователь нажал кнопку «возврат».

Спасибо.

Илья Суздальницкий
источник

Ответы:

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

Не забудьте установить делегата в раскадровке ...

введите описание изображения здесь

Илья Суздальницкий
источник
47
Убедитесь, что ваш контроллер представления установлен как делегат текстового поля.
zekel
1
Спасибо. Для меня я установил делегата через self.yourTextField.delegate = self;. Также работают даже несколько текстовых полей.
haxpor 02
@Praxiteles Теперь это можно сделать в раскадровке, не требуя делегирования, пожалуйста, проверьте ответ ниже.
Блейк Локли
51

Делегирование не требуется, вот однострочный:

- (void)viewDidLoad {
    [textField addTarget:textField
                  action:@selector(resignFirstResponder)
        forControlEvents:UIControlEventEditingDidEndOnExit];
}

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

mxcl
источник
1
Я просто хочу указать, что UIControlEventEditingDidEndOnExitсобытие отправляется только в том случае, если textFieldShouldReturn:метод делегата возвращает YES (без предварительного отказа от текстового поля).
Alex-i
Вам не нужно реализовывать делегирование. Но, может быть, вам придется вернуться YESза этим методом.
mxcl
10

SWIFT 3.0

override open func viewDidLoad() {
    super.viewDidLoad()    
    textField.addTarget(self, action: #selector(enterPressed), for: .editingDidEndOnExit)
}

в функции enterPressed () поместите все действия, которые вам нужны

func enterPressed(){
    //do something with typed text if needed
    textField.resignFirstResponder()
}
Drpawelo
источник
8

Теперь вы можете сделать это в раскадровке, используя отправленное событие Did End On Exit.

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

 @IBAction func textFieldDidEndOnExit(textField: UITextField) {
    textField.resignFirstResponder()
}

В раскадровке для желаемого текстового поля:

введите описание изображения здесь

Блейк Локли
источник
3

Версия Swift с использованием UITextFieldDelegate:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    resignFirstResponder()
    return false
}
Лео Дабус
источник
2

Swift 5

textField.addTarget(textField, action: #selector(resignFirstResponder), for: .editingDidEndOnExit)
Тед
источник
-1
- (BOOL)textFieldShouldReturn:(UITextField *)txtField 
{
[txtField resignFirstResponder];
return NO;
}

Когда нажимается кнопка ввода, вызывается этот метод делегата. Вы можете захватить кнопку возврата из этого метода делегата.

Махендра Вишвакарма
источник