Как обрабатывать нажатие на неячеистую область UITableView

У меня есть UITableView с парой UITableViewCells. Поскольку у меня есть только пара ячеек, есть область табличного представления, которая не покрыта ячейками. И я хочу что-то сделать при нажатии на пустую область.

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

Должен быть способ сделать это, но я пока не могу его понять. Есть ли способ добиться того, что я хочу сделать?


person Jake    schedule 24.05.2014    source источник
comment
Чего именно вы пытаетесь достичь? Почему вы хотите обнаруживать нажатия на пустую область?   -  person sha    schedule 24.05.2014
comment
возможный дубликат Добавить кнопки под табличным представлением   -  person Carl Veazey    schedule 24.05.2014
comment
@sha, у меня есть текстовое поле в одной из ячеек. Во время редактирования текстового поля, если пользователь нажимает на пустую область, я хочу выйти из режима редактирования.   -  person Jake    schedule 27.05.2014
comment
@carl, это не дубликат, потому что я не говорю о добавлении кнопок под представлением таблицы.   -  person Jake    schedule 27.05.2014
comment
@Jake Вопросы разные, и это нормально, но решение, возможно, такое же, то есть используйте представление нижнего колонтитула таблицы по размеру пустого пространства - вы пробовали это, и это не сработало?   -  person Carl Veazey    schedule 27.05.2014
comment
@CarlVeazey Я не пробовал идею с кнопкой, но могу предположить, что она тоже сработает. Я только что использовал решение делегата жестов, предложенное ниже, и оно отлично работает для меня.   -  person Jake    schedule 28.05.2014


Ответы (2)


Попробуйте следующее: инициализируйте и добавьте UITapGestureRecognizer в свой tableView:

UITapGestureRecognizer *gr = [[UITapGestureRecognizer alloc]  initWithTarget:self action:@selector(tap:)];
gr.delaysTouchesBegan = YES;
gr.delegate = self;
[_tableView addGestureRecognizer:gr];

реализовать метод делегата распознавателя жестов:

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
    CGPoint tapPoint = [gestureRecognizer locationInView:_tableView];
    UIView * clickedView = [_tableView hitTest:tapPoint withEvent:nil];
    NSString *viewClassName = NSStringFromClass(clickedView.class);
    return ![viewClassName hasPrefix:@"UITableViewCell"];
}

таким образом, каждое нажатие, которое вы делаете за пределами ячеек (но внутри таблицы), будет распознаваться вашим UITapGestureRecognizer

person kas-kad    schedule 24.05.2014
comment
Я использую пользовательский UITableViewCells iOS 8, и имя класса для меня — UITableViewCellContentView. - person Josh Bernfeld; 13.02.2015

Последняя строка: return ![viewClassName hasPrefix:@"UITableViewCell"]; должна быть изменена на return [viewClassName hasPrefix:@"UITableView"];, поскольку ячейка, по которой вы щелкаете, не обязательно должна быть UITableViewCell, а должна быть UIView или каким-либо другим пользовательским представлением.

person Simen Lie    schedule 20.01.2017