2012-02-19 3 views
0

У меня есть UITableView и UINavigationController, и я хотел бы различать два клика: 1) обычный щелчок, который выбирает строку, и 2) щелчок, который происходит в любом случае на экране (кроме кнопок на UINavigationController). Я написал этот код:Однократные клики UITableView

singleTap = [[UITapGestureRecognizer alloc] 
            initWithTarget:self action:@selector(singleTapHandler:)]; 
singleTap.numberOfTapsRequired = 1; 

Проблема заключается в том, что она отменяет обычные клики, которые выбирают строку.

+0

Непонятно, что означает «В любом случае на экране». Отображает ли таблица весь экран под панелью навигации? Вы имеете в виду, что хотите прикоснуться к строке таблицы, чтобы выбрать строку * и * запускать свой распознаватель кранов? –

+0

Вид таблицы занимает весь экран под панелью навигации. Я хочу, чтобы прикосновение к строке таблицы было ТОЛЬКО для выбора строки. Прикосновение в другом месте должно ТОЛЬКО запускать распознаватель крана. И нажатие кнопки на панели навигации должно запускать ТОЛЬКО кнопки push-обработчиков. Это яснее? – user1120008

+0

Похоже, что единственная часть экрана, где вы хотите распознать краны, находится в панели навигации, за пределами кнопок. Верный? –

ответ

1

Я предполагаю, что вы устанавливаете распознаватель крана либо на сам UIWindow, либо на подошву окна. Вам нужно предоставить делегату-ответчику ответчик, и делегату необходимо реализовать gestureRecognizer:shouldReceiveTouch:.

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

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    for (UIView *view = touch.view; view; view = view.superview) { 
     if ([view isKindOfClass:[UIButton class]]) 
      return NO; 
     if ([view isKindOfClass:[UITableViewCell class]]) 
      return NO; 
    } 
    return YES; 
} 
Смежные вопросы