2010-10-08 2 views
6

Total Objective-C/Cocoa Touch noob здесь, остерегайтесь.Как перехватить длительное нажатие на UITextView?

Я пытаюсь перехватить, когда пользователь долго нажимает на UITextView (появляется увеличительное стекло с позиционером каретки), а затем отпускает касание, то есть когда обычно появляются опции «Выбрать» и «Выбрать все», после увеличительного стекла. Я хочу заменить это своим собственным действием, которое затем выполняется.

Возможно ли это?

ответ

14

Вы можете попробовать что-то вроде этого:

Отключить встроенный в длинный пресс-распознаватель

for (UIGestureRecognizer *recognizer in textView.gestureRecognizers) { 
    if ([recognizer isKindOfClass:[UILongPressGestureRecognizer class]]){ 
    recognizer.enabled = NO; 
    } 
} 

Затем добавить свой собственный

UILongPressGestureRecognizer *myLongPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:<your target> action:@selector(<your custom handler>)]; 
[textView addGestureRecognizer:myLongPressRecognizer]; 
[myLongPressRecognizer release]; 
+0

Это выглядит хорошо ... но есть ли у меня способ держать увеличительное стекло? В основном меня интересует выпуск длинной прессы ПОСЛЕ лупы - – Epaga

+0

Хмм, не пробовал это раньше. Вы можете попробовать переопределить метод, который обрабатывает увеличительное стекло, чтобы добавить вашу обработку, когда она закончится, но это, вероятно, частный метод, так что это может не сработать с группой экспертов Apple. Другой способ - переделать увеличительное стекло самостоятельно. – Altealice

+2

Мне нравится думать здесь, но, к сожалению, этот подход не работает. Может быть, частный скрытый subview внутри UITextView, который получает распознаватель? – BadPirate

1

Swift версия @ Altealice КОДЕКС, чтобы отключить встроенный распознаватель длинного пресса:

if let actualRecognizers = self.sourcesTextView.gestureRecognizers { 
    for recognizer in actualRecognizers { 
     if recognizer.isKindOfClass(UILongPressGestureRecognizer) { 
      recognizer.enabled = false 
     } 
    } 
} 

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

0

если вы удалите [LongPressgesture setMinimumPressDuration:2.0]; он будет работать .. так как вкладка жест будет называться, чтобы начать редактировать текстовое поле ... или просто реализовать эту функцию жест делегата

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return YES; 
} 
Смежные вопросы