жест длительного нажатия на ячейку представления таблицы
Я хочу два взаимодействия в ячейке представления таблицы: обычный кран и длительное нажатие. Я использовал ответ на следующий вопрос, чтобы помочь мне начать работу:
длительное нажатие на 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.