it-roy-ru.com

Как мне отклонить клавиатуру iOS?

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

73
Tyler McMaster
[myTextField resignFirstResponder]

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

62
Evan Mulawski

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

188
benzado

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

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

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

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

[viewController setEditing:NO animated:YES];
8
user2216794

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

Убедитесь, что в вашем файле контроллера представления 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
Thomas.Benz

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

-(IBAction)removeKeyboard;

А в реализации напишите что-то вроде этого:

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

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

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

6
naSh

Это подаст в отставку одно конкретное текстовое поле 

// Swift
TextField.resignFirstResponder()

// Objective C
[TextField resignFirstResponder];

Для отставки любого текстового поля используйте код ниже 

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

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

Если вы не знаете, какой 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]);
2
BadPirate

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

UIApplication.shared.keyWindow?.endEditing(true)

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

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

2
Cœur
-(void)methodName
{
    [textFieldName resignFirstResponder];
}

вызовите этот метод (methodName) с didEndOnExit

1
Pravi Jay

Для Swift 3

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

textField.resignFirstResponder()

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

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

    textField.resignFirstResponder()

    return true
}
1
pableiros

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

[yourTextFieldName resignFirstResponder];
1
A.sharif

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

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

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

Добавьте UITextFieldDelegate к вашему классу, как показано ниже:

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

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

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

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

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

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

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

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

    [textField reloadInputViews];
}
0
jeet.chanchawat