2010-10-08 7 views
6

Total Objective-C/Cocoa Touch noob aquí, ten cuidado.¿Cómo se intercepta la pulsación larga en UITextView?

Estoy tratando de interceptar cuando un usuario presiona por un UITextView (una lupa aparece con el posicionador de intercalación) y luego lo suelta, es decir, cuando normalmente aparecen las opciones "Seleccionar" y "Seleccionar todo", después de la lupa. Quiero reemplazar esto con mi propia acción personalizada que luego se realiza.

¿Esto es posible?

Respuesta

14

Usted puede intentar algo como esto:

Desactivar la incorporada en el reconocedor de pulsación larga

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

Publique sus propios

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

Esto se ve bien ... pero es ¿Hay alguna forma de que guarde la lupa? Lo que más me interesa es el lanzamiento de la pulsación larga DESPUÉS de la lupa: – Epaga

+0

Hmm, no lo he intentado antes. Puede intentar anular el método que maneja la lupa para agregar su manejo cuando termine, pero es probable que sea un método privado, por lo que puede no funcionar bien con el equipo de revisión de Apple. La otra forma es volver a implementar la lupa usted mismo. – Altealice

+2

Me gusta pensar aquí, pero lamentablemente este enfoque no funciona. ¿Podría ser una subvista privada enterrada dentro de UITextView que obtiene el reconocedor? – BadPirate

1

SWIFT versión del código de @ Altealice para desactivar la reconocedor incorporado de la prensa larga:

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

Esta solución funciona, pero tenga en cuenta que va a deshabilitar las interacciones textView, por lo que los enlaces no se resaltarán cuando se presionen y el texto no se podrá seleccionar.

0

si se quita el [LongPressgesture setMinimumPressDuration:2.0]; que va a funcionar .. ya que el movimiento de tabulación será llamado para iniciar editar el campo de texto ... o simplemente implementar esta función de gestos delegado

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return YES; 
} 
Cuestiones relacionadas