Как да се справим с докосване върху област извън клетка на 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