Как мне переставить ResignFirstResponder, когда я щелкаю за пределами UITextField на UITableView - PullRequest
6 голосов
/ 29 февраля 2012

У меня возникают проблемы с пропуском клавиатуры в моем приложении для iPhone, потому что UIView, даже когда он сделан контроллером, не работает, потому что у меня есть UITableView, занимающий остальную часть доступного экрана.

Мне было любопытно узнать, как бы я ушел в отставку клавиатуры, ака firstResponder, нажав на UITableView?Есть ли способ контролировать событие касания на UITableView, даже если это не для выбора ячейки, на которую можно нажать.

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

Ответы [ 4 ]

6 голосов
/ 29 февраля 2012

2 варианта:

  • В вашем viewController ответьте на обратный вызов прокрутки таблицы и подайте в отставку ответчик
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
     [self.view endEditing:YES];
}
  • Вы всегда можете добавить UITapGestureRecognizer к таблице / представлению и отменить ответчик оттуда

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

3 голосов
/ 06 июля 2016

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

Вы можете установить в Interface Builder свойство keyboardDismissMode to "Уволить на перетащить "для вашего представления таблицы.Это свойство, унаследованное от UIScrollView, и всякий раз, когда вы прокручиваете представление таблицы, клавиатура отклоняется.

3 голосов
/ 01 марта 2012
   - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    UITapGestureRecognizer *doubleTap = 
            [[UITapGestureRecognizer alloc]
             initWithTarget:self 
             action:@selector(tapDetected:)];
            doubleTap.numberOfTapsRequired = 1;
            [self.tableView addGestureRecognizer:doubleTap];
            [doubleTap release];

    }

 - (IBAction)tapDetected:(UIGestureRecognizer *)sender 
 {
    CGPoint p = [sender locationInView:self.tableView];

    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:p];

   if(indexPath == nil)
   {
     NSLog(@"empty");
   }
   else
   {
     [textField resignFirstResponder];
   }
 }

Я думаю, это поможет ... попробуйте ..

0 голосов
/ 04 марта 2015
@property (weak, nonatomic) UITextField *activeTextField; // keeps track of whose keyboard is being displayed.

- (void)textFieldDidBeginEditing:(UITextField *)textField {
   self.activeTextField = textField;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   // if (indexPath equal to something then)
   [self.activeTextField resignFirstResponder];
}
...