Как скрыть клавиатуру, когда я нажимаю клавишу возврата в UITextField?


148

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


13
Приятной особенностью Stack Overflow является то, что на МНОГИЕ вопросы уже даны ответы, особенно простые. Поэтому, пожалуйста, ищите ответы в первую очередь, прежде чем спрашивать. Видите, все просто: stackoverflow.com/search?q=iphone+hide+keyboard
Феликсиз

Это подкласс поля UIText, который динамически изменяет UIReturnKey в соответствии с условием текста / строки: github.com/codeinteractiveapps/OBReturnKeyTextField
CodeInteractive

Ответы:


286

Сначала сделайте ваш файл делегатом для UITextField

@interface MYLoginViewController () <UITextFieldDelegate>

@end

Затем добавьте этот метод в ваш код.

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

Также добавьте self.textField.delegate = self;


1
Любопытно, почему <UITextFieldDelegate> не требуется? Обычно вы увидите предупреждение в этом случае.
pixelfreak

7
если вы делегируете свой файл с помощью Interface Builder, тогда <UITextFieldDelegate> не требуется в файле .h ..
Saurabh

1
добавление <UITextFieldDelegate> в файл .h и установка делегата в viewdidload [yourTextField setDelegate: self]; завершу это!
Умит Кайя

@Saurabh Что такого особенного в раскадровке VC?
Павел Бревчински

62

В viewDidLoadобъявить:

[yourTextField setDelegate:self];

Затем включите переопределение метода делегата:

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

6
+1 за setDelegate:напоминание. Определенно забыл, и код не работал ранее.
Пиперчестер

2
Не должно ли это быть textField, а не yourTextField во время его передачи?
Клайв Джефферис

это способ сказать, что объявить делегата вашего textField
Оскар

1
<UITextFieldDelegate> должен быть в файле .h, в противном случае появится предупреждение!
Умит Кая

22

Попробуйте это в Swift ,

Шаг 1: Установите делегата как себя для вашегоtextField

textField.delegate = self

Шаг 2: Добавьте этот UITextFieldDelegate ниже вашего объявления класса,

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

14

В Swift сделать так:
сначала в вашей ViewControllerреализации это, UITextFieldDelegate например.

class MyViewController: UIViewController, UITextFieldDelegate {
....
}

Теперь добавьте делегата к a, TextFieldв котором вы хотите отменить клавиатуру, когда return вызывается в viewDidLoadметоде, подобном приведенному ниже, или в том месте, где вы его инициализируете. Например,

override func viewDidLoad() {

    super.viewDidLoad()   
    myTextField.delegate = self
}

Теперь добавьте этот метод.

func textFieldShouldReturn(textField: UITextField) -> Bool {

    textField.resignFirstResponder()
    return true
}

1
Второй шаг не обязателен, если установить делегат в IB.
hris.to

Появляется (в текущих версиях Swift) перед "textField:" должно быть подчеркивание
Брайс Сэндлунд

2

Попробуй это,

[textField setDelegate: self];

Затем в текстовом методе делегата

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

это не лучшая практика для этого.
orafaelreis

нуждается в UITextFieldDelegate в определении интерфейса.
Алп Альтунел

@AlpAltunel: Спасибо за комментарий, это было 4 года назад.
Vineesh TP

1

установить делегат UITextFieldи переопределить textFieldShouldReturnметод, в этом методе просто напишите следующие две строки:

[textField resignFirstResponder];
return YES;

Это оно. Перед написанием кода не забудьте установить делегат a UITextFieldи установить тип возвращаемого ключа на «Готово» из окна свойств (команда + Shift + I).


1

Вы можете соединить «Основное действие, инициируемое» (щелкните правой кнопкой мыши на UITextField) с IBAction, и вы можете подать в отставку первый респондент (без делегирования). Пример (Swift 4):

@IBAction func textFieldPrimaryAction(_ sender: UITextField) {
    sender.resignFirstResponder()
    ...
}

Предпочтительный способ при использовании раскадровки.
Лал

1

Swift 4

Установите делегат UITextFieldв поле зрения контроллера field.delegate = self, а затем:

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)
    }
}

как бы вы справились с желанием, чтобы пользователи «переходили» к следующему текстовому полю нажатием клавиши возврата до последнего, а затем он ушел в отставку? Также в SwiftUI.
Learn2Code

@ Learn2Code создай менеджер, собери текстовые поля и цепочку, последний вызовет функцию финиша.
Dimpiax

1

Если вы хотите скрыть клавиатуру для конкретной клавиатуры, используйте [self.view resignFirstResponder]; Если вы хотите скрыть клавиатуру от просмотра, используйте[self.view endEditing:true];



0

Хорошо, я думаю, что для новичка все может быть немного запутанным. Я думаю, что правильный ответ - это смесь всего вышеперечисленного, по крайней мере, в Swift4.

Либо создайте расширение, либо используйте ViewController, в котором вы хотели бы использовать это, но обязательно реализуйте UITextFieldDelegate. Ради многократного использования мне было проще использовать расширение:

extension UIViewController : UITextFieldDelegate {
    ...
}

но альтернатива работает также:

class MyViewController: UIViewController {
    ...
}

Добавьте метод textFieldShouldReturn (в зависимости от вашего предыдущего варианта, либо в расширении, либо в вашем ViewController)

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    return textField.endEditing(false)
}

В вашем методе viewDidLoad установите для делегата текстового поля значение self

@IBOutlet weak var myTextField: UITextField!
...

override func viewDidLoad() {
    ..
    myTextField.delegte = self;
    ..
}

Это должно быть все. Теперь, когда вы нажимаете следует.returntextFieldShouldReturn


0

Определите этот класс, а затем настройте свое текстовое поле на использование класса, и это автоматически автоматизирует скрытую клавиатуру при автоматическом нажатии клавиши 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
    }

}

Тогда все, что вам нужно сделать в раскадровке, это установить поля для использования класса:

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.