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

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

длительное нажатие на UITableView

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

4 ответов


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

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

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

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

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
    }
}
}

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


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

добавить UILongPressGestureRecognizer в самой камере.

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

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


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

добавление решения в swift ниже:

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

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