Как отключить клавиатуру iOS?

У меня есть UITextfield, для которого я хотел бы отменить клавиатуру. Я не могу заставить клавиатуру уйти, независимо от того, какой код я использую.

Ответ 1

[myTextField resignFirstResponder]

Здесь второй абзац в разделе "Отображение и скрытие клавиатуры".

Ответ 2

Если у вас несколько текстовых полей и не знаете, кто из них первый ответчик (или у вас просто нет доступа к текстовым полям из любого места, где вы пишете этот код), вы можете вызвать endEditing: в родительском представлении содержащие текстовые поля.

В режиме контроллера вида он будет выглядеть так:

[self.view endEditing:YES];

Параметр заставляет текстовое поле сбрасывать статус первого ответчика. Если вы использовали делегат для выполнения проверки и хотели остановить все до тех пор, пока содержимое текстового поля не будет действительным, вы также можете закодировать его следующим образом:

BOOL didEndEditing = [self.view endEditing:NO];
if (didEndEditing) {
    // on to the next thing...
} else {
    // text field must have said to first responder status: "never wanna give you up, never wanna let you down"
}

Метод endEditing: намного лучше, чем рассказать отдельные текстовые поля resignFirstResponder, но по какой-то причине я даже не узнал об этом до недавнего времени.

Ответ 3

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

Один пример того, как туда добраться:

  • программно нажмите ABPersonViewController на экран; открыть любой контакт;
  • коснитесь поля "примечание" (которое становится первым ответчиком и запускает клавиатуру);
  • проведите пальцем влево в любом другом поле, чтобы появилась кнопка "Удалить";
  • к этому моменту у вас нет первого ответчика среди текстовых полей (просто проверьте программно), но клавиатура все еще там. Вызов [view endEditing: YES] ничего не делает.

В этом случае вам также нужно попросить контроллер вида выйти из режима редактирования:

[viewController setEditing:NO animated:YES];

Ответ 4

Я предлагаю вам добавить и действие в файл заголовка:

-(IBAction)removeKeyboard;

И в реализации напишите что-нибудь вроде этого:

-(IBAction)removeKeyboard
{
[self.textfield resignFirstResponder];
}

В файле NIB подключитесь из UITextFiled к файловому владельцу в опции DidEndOnExit. Таким образом, при нажатии клавиши возврата клавиатура исчезнет.

Надеюсь, что это поможет!

Ответ 5

В вашем представлении контроллера файла YourViewController.h убедитесь, что вы реализуете протокол UITextFieldDelegate:

@interface YourViewController : <UITextFieldDelegate>

@end

Затем в файле YourViewController.m реализуется следующий метод экземпляра:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.yourTextField1 resignFirstResponder];
    [self.yourTextField2 resignFirstResponder];
    ...
    [self.yourTextFieldn resignFirstResponder];
}

Ответ 6

Я обнаружил случай, когда endEditing и resignFirstResponder терпят неудачу. Это сработало для меня в тех случаях.

ObjC

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];    
[self setEditing:NO];

стриж

UIApplication.shared.sendAction(#selector(resignFirstResponder), to: nil, from: nil, for: nil)

Ответ 7

в крайнем случае 💩

let dummyTextView = UITextView(frame: .zero)
view.addSubview(dummyTextView)
dummyTextView.becomeFirstResponder()
dummyTextView.resignFirstResponder()
dummyTextView.removeFromSuperview()

Ответ 8

Если вы не знаете, какой textField является первым ответчиком, вы можете его найти. Я использую эту функцию:

UIView *resignFirstResponder(UIView *theView)
{
    if([theView isFirstResponder])
    {
        [theView resignFirstResponder];
        return theView;
    }
    for(UIView *subview in theView.subviews)
    {
        UIView *result = resignFirstResponder(subview);
        if(result) return result;
    }
    return nil;
}

Затем в вашем кодовом вызове:

    UIView *resigned = resignFirstResponder([UIScreen mainScreen]);

Ответ 9

Это отменит одно текстовое поле.

// Swift
TextField.resignFirstResponder()

// Objective C
[TextField resignFirstResponder];

Чтобы отменить любое текстовое поле, используйте ниже код

// Swift
self.view!.endEditing(true)

// Objective C
[self.view endEditing:YES];

Ответ 10

Для отставки любого текстового поля в приложении

UIApplication.shared.keyWindow?.endEditing(true)

Этот подход чист и гарантированно работает, потому что keyWindow по определению является корневым представлением всех возможных представлений, отображающих клавиатуру (источник):

Окно клавиш получает клавиатурные и другие не связанные с касанием события. Только одно окно одновременно может быть ключевым окном.

Ответ 11

Вы просто замените yourTextFieldName, как вы уже догадались! ваше текстовое поле. Это закроет клавиатуру.

[yourTextFieldName resignFirstResponder];

Ответ 12

-(void)methodName
{
    [textFieldName resignFirstResponder];
}

вызовите этот метод (methodName) с помощью didEndOnExit

Ответ 13

Для Swift 3

Вы можете скрыть клавиатуру следующим образом:

textField.resignFirstResponder()

Если вы хотите скрыть клавиатуру, когда пользователь нажимает кнопку "intro", вы должны реализовать следующий метод UITextFieldDelegate:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {

    textField.resignFirstResponder()

    return true
}

Ответ 14

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    // your code

    [textField reloadInputViews];
}

Ответ 15

3 простых и быстрых шага

Добавьте UITextFieldDelegate в свой класс, как UITextFieldDelegate ниже:

class RegisterVC: UIViewController, UITextFieldDelegate {
    //class implementation 
}

в реализации класса добавьте функцию делегата textFieldShouldEndEditing: ::

internal func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    self.view.endEditing(true)
    return true
}

и в качестве последнего шага, установите ваш UITextField UITextField на себя, где-то подходящим. Например, внутри функции viewDidLoad:

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

Теперь, когда пользователь нажимает клавишу возврата, клавиатура будет отклоняться.

Я также подготовил фрагмент кода, вы можете проверить его здесь.

Ответ 16

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
}

}

Ответ 17

  • Настройте событие "Закончено на выход" в Xcode (щелкните правой кнопкой мыши на текстовое поле).

    Снимок экрана

  • Реализуйте этот метод:

    -(IBAction) closeKeyboard:(id) sender {
        [_txtField resignFirstResponder];
    }