ios - UITapGestureRecognizer с UITextView

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

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

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

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

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

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

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

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


person Bryan Chen    schedule 20.05.2011    source источник


Ответы (2)


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

textView.gestureRecognizers = nil;

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

person Deepak Danduprolu    schedule 20.05.2011
comment
Спасибо!! На самом деле он также отключает функцию прокрутки, поэтому вместо удаления всех распознавателей я все еще сохраняю распознаватель панорамирования. - person Bryan Chen; 20.05.2011
comment
Забыл об этом. Рад, что смог помочь. - person Deepak Danduprolu; 20.05.2011

Спасибо ... Мне удалось это с помощью предложения 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];
person yunas    schedule 30.03.2012
comment
вам не хватает [textView setGestureRecognizers: arr]? - person Brad G; 20.07.2012
comment
Вы понимаете, что просто делаете копию массива распознавателя жестов и манипулируете им? Массив текстового представления здесь никогда не затрагивается. - person ; 26.12.2013
comment
На самом деле весь этот цикл бессмысленен. Просто создайте пустой массив и установите его. - person ; 26.12.2013
comment
@BradGoss, нет, мне не хватает setGestureRecognizer, если вы понимаете, я использую addGestureRecognizer, который добавляет новый жест касания. - person yunas; 26.12.2013
comment
@MachOSX, я реализовал это в одной из своих задач, и он отлично работает. Ты пробовал это ? - person yunas; 26.12.2013