2012-02-20 3 views
7

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

Long press on UITableView

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

+1

Что такое «недопустимая ячейка» по вашему определению? – omz

+0

Я думаю, что его «не нужна ячейка» –

ответ

-2

Возможно отключение выбор в IB или программно

[cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
+0

Это просто отключает синюю подсветку? – user1120008

+0

Моя теория заключается в том, что ваш длинный жест не срабатывает, потому что ячейка уже выделена. Пожалуйста, проверьте мое предложение, вы ничего не потеряете. –

+0

Не повезло с этим подходом. – user1120008

23

Существует, вероятно, лучше ответить там, но вот один из способов сделать это:

Сначала создать длинный пресс жест распознаватель на столе просматривать себя.

UILongPressGestureRecognizer* longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(onLongPress:)]; 
[self.tableView addGestureRecognizer:longPressRecognizer]; 

Затем справиться с рутиной, которая может найти выбранную строку:

-(void)onLongPress:(UILongPressGestureRecognizer*)pGesture 
{ 
if (pGesture.state == UIGestureRecognizerStateRecognized) 
{ 
    //Do something to tell the user! 
} 
if (pGesture.state == UIGestureRecognizerStateEnded) 
{ 
    UITableView* tableView = (UITableView*)self.view; 
    CGPoint touchPoint = [pGesture locationInView:self.view]; 
    NSIndexPath* row = [tableView indexPathForRowAtPoint:touchPoint]; 
    if (row != nil) { 
     //Handle the long press on row 
    } 
} 
} 

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

2

Я столкнулся с той же проблемой и нашел хорошее решение. (по крайней мере, на iOS 7)

Добавьте это UILongPressGestureRecognizer к самой ячейке.

self.longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(onSelfLongpressDetected:)]; 
[self addGestureRecognizer:self.longPressGesture]; 

Его странно, но важно, чтобы инициализировать с мишенью для себя, а также добавить gestureRecognizer снова к себе и метод onSelfLongpressDetected вызывается.

0

У меня была проблема с этим. Сначала я попытался добавить длинный жест прессы к UIView внутри ячейки, и это не сработало. Решение заключалось в том, чтобы добавить жест к самой ячейке, как это было сказано ранее в ответе Фабио.

Добавление раствора в быстром сильфона:

let longPress = UILongPressGestureRecognizer.init(target: self, action: #selector(longPress(_:))) 
longPress.minimumPressDuration = 1.0 
cell.addGestureRecognizer(longPress) 

Я использовал код, указанный выше внутри метода cellForRowAtIndexPath UITableViewDataSource.

Смежные вопросы