Обнаружение касания и удержания внутри UITableView - PullRequest
1 голос
/ 10 ноября 2010

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

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

Ответы [ 3 ]

18 голосов
/ 15 марта 2012

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

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

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

Обработка события длительного нажатия и получение indexPath:

-(void) handleLongPress: (UIGestureRecognizer *)longPress {
    if (longPress.state==UIGestureRecognizerStateBegan) {
        CGPoint pressPoint = [longPress locationInView:table];
        NSIndexPath *indexPath = [table indexPathForRowAtPoint:pressPoint];
    }
}
6 голосов
/ 10 ноября 2010

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

3 голосов
/ 10 ноября 2010

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

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

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

UILongPressGestureRecognizer Документация

UIGestureRecognizer Документация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...