0

Таким образом, у меня есть представление, в котором у него есть представление, которое имеет UITapGestureRecognizer на изображении, и у меня есть представление таблицы. Проблема в том, что когда я нажимаю на ячейку просмотра таблицы и вид, на котором находится распознаватель жестов, на ней стоит, действие этого UITapGestureRecognizer также выполняется. Вопрос в том, как отключить это, чтобы при выполнении представления таблицы didSelectRowAtIndexPath действие распознавателя жестов не было выполнено? Кстати я установить:UITableView didSelectRowAtIndexPath и UITapGestureRecognizer конфликты

tapGestureRecognizer.cancelsTouchesInView = NO; 

Я также пробовал делать:

- (IBAction) handleTapGesture:(UITapGestureRecognizer *) sender { 

    if ([sender.view isKindOfClass:[TileViewController class]]){ 
     NSLog(@"CANCEL THIS"); 
    } 

    if ([sender.view isKindOfClass:[UITableView class]]){ 
     NSLog(@"CANCEL THIS"); 
    } 
} 

, но он никогда не пошел в если заявления

ответ

1

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

[myImage addGestureRecognizer:tapGestureRecognizer]; 
0

Набор

yourView.userInteractionEnabled = NO; 

на что вы кладете в ячейку таблицы. Это должно отменить касания всех детских взглядов. Вероятно, вы можете легко установить его в своей функции cellForRowAtIndexPath.

+0

это не то, что я хочу, я хочу didSelectRowAtIndexPath быть выполнены, но не действие tapGestureRecognizer – aherlambang

+0

не установить его на ячейку, установите его на подвид вы добавляете к ячейке , –

+0

Я сделал .. так что в основном у меня есть подкласс ячейки UITableView, и я установил userInteractionEnabled = NO после добавления его в subview – aherlambang

2

Вы можете также управлять этим путем внедрения gestureRecognizer:shouldReceiveTouch: и используя класс мнение, чтобы определить, какие действия предпринять. Преимущество такого подхода заключается в том, что в области, непосредственно связанной с таблицей, нет маскирующих кранов (эти точки зрения все еще происходят из экземпляров UITableView, но они не представляют ячейки).

Предостережение: существует предположение, что Apple не изменит имя класса.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    return ![NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]; 
}