2010-11-10 2 views
1

Я пытаюсь обнаружить жесты касания и удержания внутри UITableView, отслеживая, какая ячейка была выбрана. Мне нужно уметь различать нормальные краны на ячейке и затрагивает это дольше, чем X секунд (возможно, 1 с или около того). Основная проблема заключается в том, что я хотел бы сделать это без подкласса UITableViewCell, так как это значительно замедляло мою прокрутку. Я думаю, что есть способ сделать это с помощью NSTimer, но я не могу заставить его работать правильно. Использование touchhesBegan: и touchesEnded: с таймером нет, так как я не вижу никакого способа отслеживать, какая ячейка была выбрана, если нет какого-то способа сделать это с помощью этих методов? Любая помощь будет принята с благодарностью.Обнаружение касания и удержания внутри UITableView

Заранее спасибо.

+2

Для OS 3.2 или более поздней версии , вы можете использовать UILongPressGestureRecognizer. См. Http://stackoverflow.com/questions/3924446/long-press-on-uitableview/3924965#3924965. – Anna

+0

Отлично, спасибо. – Matt

ответ

6

UILongPressGestureRecognizer предназначен для этой цели. Вы создаете его и добавляете его в UITableViewCell для обработки длинных нажатий.

+0

Это прекрасно, я не понимал, что это даже существовало и не видел его в документации. Большое спасибо! – Matt

3

Краткий ответ: Подкласс и используйте UILongPressGestureRecognizer.

Более длинный ответ: я считаю, что причина, по которой у вас возникают проблемы с прокруткой с вашим подклассом UITableViewCell, заключается в том, что reuseIdentifier не соответствует, и поэтому ячейки не используются повторно. Убедитесь, что reuseIdentifier, который вы используете в своем методе cellForRowAtIndexPath:, соответствует reuseIdentifier, который вы настраиваете в Interface Builder для пользовательского UITableViewCell. У меня была такая же проблема, когда я сделал свой первый подкласс, и только совпадение с reuseIdentifier сделало все лучше. :)

Что касается использования UILongPressGestureRecognizer, ознакомьтесь с документацией для UIGestureRecognizer, и вы должны уметь быстро ее разобраться.

UILongPressGestureRecognizer Documentation

UIGestureRecognizer Documentation

+0

Спасибо, но я не использую IB ни для чего, все создано программно. Проблема известна, когда добавление нескольких подзонов в ячейку без пользовательского чертежа замедляет прокрутку. Поэтому я просто избегал подклассов и просто «гадал» мои ячейки таблицы и пользовательские рисования/размещения элементов ячейки, не добавляя subviews, и все прокручивается гладко. – Matt

18

Если мы говорим о клетках, вы можете получить indexPath ячейки, которая была нажата.

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

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)]; 
[cell addGestureRecognizer:longPress]; 
[longPress release]; 

Handle длинный пресс-конференцию и получить indexPath:

-(void) handleLongPress: (UIGestureRecognizer *)longPress { 
    if (longPress.state==UIGestureRecognizerStateBegan) { 
     CGPoint pressPoint = [longPress locationInView:table]; 
     NSIndexPath *indexPath = [table indexPathForRowAtPoint:pressPoint]; 
    } 
} 
+0

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

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