Простой способ уволить клавиатуру? - PullRequest
373 голосов
/ 12 апреля 2009

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

Ответы [ 31 ]

1 голос
/ 02 декабря 2015

Чтобы закрыть клавиатуру после ее появления, есть 2 чехла ,

  1. , когда UITextField равен внутри UIScrollView

  2. , когда UITextField равен вне UIScrollView

2. когда UITextField находится вне UIScrollView переопределить метод в вашем подклассе UIViewController

Вы также должны добавить делегата для всех UITextView

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];
}
  1. При просмотре с прокруткой нажатие на кнопку не вызовет событие , поэтому в этом случае используйте устройство распознавания жестов Tap Перетащите UITapGesture для представления прокрутки и создайте для него IBAction .

, чтобы создать IBAction, нажмите ctrl + щелкните UITapGesture и перетащите его в .h файл viewcontroller.

Здесь я назвал tappedEvent именем моего действия

- (IBAction)tappedEvent:(id)sender {
      [self.view endEditing:YES];  }

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

http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/

0 голосов
/ 22 декабря 2010

проще всего назвать метод

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    if(![txtfld resignFirstResponder])
    {
        [txtfld resignFirstResponder];
    }
    else
    {

    }
    [super touchesBegan:touches withEvent:event];
}
0 голосов
/ 05 октября 2016

Обновление

Я нашел другой простой способ

просто объявите свойство: -

@property( strong , nonatomic) UITextfield *currentTextfield;

и Gecognizer жеста касания: -

@property (strong , nonatomic) UITapGestureRecognizer *resignTextField;

В ViewDidLoad

_currentTextfield=[[UITextField alloc]init];
_resignTextField=[[UITapGestureRecognizer alloc]initWithTarget:@selector(tapMethod:)];

[self.view addGestureRecognizer:_resignTextField];

Реализация метода делегата текстового поля didBeginEditing

 -(void)textFieldDidBeginEditing:(UITextField *)textField{


      _currentTextfield=textField;

    }

Реализация метода жестов касания (_resignTextField)

 -(void)tapMethod:(UITapGestureRecognizer *)Gesture{

     [_currentTextfield resignFirstResponder];

 }
0 голосов
/ 14 сентября 2016

Вы должны использовать один из этих методов,

[self.view endEditing:YES];

или

[self.textField resignFirstResponder];
0 голосов
/ 11 сентября 2010

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

Не очень хорошее решение, особенно если у вас много подпредставлений, но для простых приложений это должно сработать.

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

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

0 голосов
/ 05 июля 2016

В быстром:

self.view.endEditing(true)
0 голосов
/ 01 июля 2016

Да, endEditing - лучший вариант. А из iOW 7.0, UIScrollView имеет классную функцию, позволяющую отключить клавиатуру при взаимодействии с видом прокрутки. Для достижения этого вы можете установить keyboardDismissMode свойство UIScrollView.

Установить режим отклонения клавиатуры как:

tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag

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

0 голосов
/ 24 мая 2010

Это не красиво, но то, как я отказываюсь от первого ответа, когда я не знаю, что это за ответчик:

Создайте UITextField, либо в IB, либо программно. Сделать это скрытым Свяжите это с вашим кодом, если вы сделали это в IB. Затем, когда вы хотите закрыть клавиатуру, вы переключаете респондент в невидимое текстовое поле и сразу же оставляете его:

  [self.invisibleField becomeFirstResponder];
  [self.invisibleField resignFirstResponder];
0 голосов
/ 30 ноября 2009

Я ненавижу, что не существует "глобального" способа программно отключить клавиатуру без использования частных вызовов API. Зачастую мне нужно программно отключать клавиатуру, не зная, какой объект является первым респондентом. Я прибег к проверке self с помощью API-интерфейса Objective-C, перечисляя все его свойства, извлекая свойства типа UITextField и отправляя им сообщение resignFirstResponder.

Это не должно быть так сложно сделать ...

0 голосов
/ 24 марта 2015

Добавьте устройство распознавания жестов касанием к своему виду. И определите его ibaction

Ваш файл .m будет похож на

    - (IBAction)hideKeyboardGesture:(id)sender {
    NSArray *windows = [UIApplication sharedApplication].windows;
    for(UIWindow *window in windows) [window endEditing:true];
    [[UIApplication sharedApplication].keyWindow endEditing:true];
}

Это сработало для меня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...