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



Answers

Если у вас несколько текстовых полей и не знаете, кто из них первый ответчик (или у вас просто нет доступа к текстовым полям, где бы вы ни пишете этот код), вы можете вызвать 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 , но по какой-то причине я даже не узнал об этом до недавнего времени.

Question

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




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

// Swift
TextField.resignFirstResponder()

// Objective C
[TextField resignFirstResponder];

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

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

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



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

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




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

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



Я обнаружил случай, когда 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)



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

-(IBAction)removeKeyboard;

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

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

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

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




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

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

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

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

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

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

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

Теперь, когда пользователь нажимает на возвращаемый ключ, клавиатура будет уволена.

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




Чтобы отменить любое текстовое поле в приложении

UIApplication.shared.keyWindow?.endEditing(true)

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

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




Related



Tags

ios ios   keyboard