2013-10-08 3 views
2

У меня есть подкласс диспетчера представлений. Я пытаюсь подключить распознаватель жестов для захвата кранов под строками.UITableView backgroundView жесты на iOS 7?

Для этого у меня есть пустая строка внизу, поэтому пользователь всегда может прокручивать, так что на экране есть пустая ячейка. Я могу легко захватить краны в этой строке.

Но напоминания на iOS 7 поддерживают прослушивание даже под этим; если на столе есть еще три строки, любой из этих трех может быть использован не только для первого.

Например, вы можете нажать в красной зоне:

enter image description here

Чтобы сделать это на IOS 6, я добавил фоновый вид на стол и зацепил жест распознаватель к нему:

UIView *backgroundView = [[UIView alloc] init]; 
[backgroundView addGestureRecognizer:_tapOutsideGesture]; 
backgroundView.backgroundColor = [UIColor clearColor]; 
self.tableView.backgroundView = backgroundView; 

Это работает, когда на 6.1, но не на 7.0. Что мне не хватает?

Я строю с Xcode 5.0 и 7.0 SDK, с IPHONEOS_DEPLOYMENT_TARGET = 6.1.

ответ

1

Вы можете попробовать использовать

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch; 

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

Возможно, есть проблемы с iOS7. Если вы хотите узнать, находитесь ли вы в UITableViewCell, то вам необходимо позвонить по номеру view.superview.superview в iOS7, а в iOS6 было view.superview.

Более подробная информация о iOS7: How to get UITableView from UITableViewCell?https://devforums.apple.com/message/865550#865550

1

Добавить жест распознаватель в вашем табличном

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doSomething:)]; 
tapGesture.delegate = self; 
[self.tableView addGestureRecognizer:tapGesture]; 

и проверить, если кран был над некоторой ячейкой.

#pragma mark – UIGestureRecognizerDelegate 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 

    return ![self.tableView indexPathForRowAtPoint:[touch locationInView:self.tableView]]; 
} 
Смежные вопросы