IOS - UITapGestureRecognizer с UITextView - PullRequest
1 голос
/ 20 мая 2011

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

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

Это нормально, когда я просто добавляю к нему распознаватель крана.

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showOrHideToolbars)];
tapRecognizer.numberOfTapsRequired = 2;
tapRecognizer.numberOfTouchesRequired = 1;
[textView addGestureRecognizer:tapRecognizer];

Работает хорошо, исключая, если я коснусь и удерживаю текстовое представление, после этого распознаватель больше не будет получать никаких действий.

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

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

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

Ответы [ 2 ]

7 голосов
/ 20 мая 2011

Существует ряд других распознавателей жестов, прикрепленных к текстовому представлению. Так как вы, кажется, не нуждаетесь в них. Вы можете удалить их.

textView.gestureRecognizers = nil;

перед добавлением распознавателя двойного касания. Это работает.

1 голос
/ 30 марта 2012

Спасибо ... Я справился с этим по предложению Deepdak ... Следующий код сделает нужную вещь:)

UITapGestureRecognizer *taprecog = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(openFolderController)];
taprecog.numberOfTapsRequired = 2;
taprecog.numberOfTouchesRequired = 1;

NSMutableArray *arr = [[NSMutableArray alloc]initWithArray:[textView gestureRecognizers]];
for (int i = 0; i < [arr count]; i++) {
    if ([[arr objectAtIndex:i] isKindOfClass:[UITapGestureRecognizer class] ]) {
        [arr removeObject:[arr objectAtIndex:i]];
    }   
}

[textView addGestureRecognizer:taprecog];
[taprecog release];
...