2010-04-14 13 views
5

Quiero seleccionar Texto en UITextView, similar a las opciones de pop predeterminadas "Seleccionar" y "Seleccionar todo" que vemos cuando tocamos. Quiero que el usuario pueda hacer eso desde mi menú personalizado. Jugué con selectedRange pero eso no parece ser el truco. ¿Algunas ideas?¿Puedo seleccionar texto mediante programación en UITextView?

Gracias

+0

¿Puedes publicar el código donde has tratado de usar' selectedRange'? Eso suena como el enfoque correcto; es posible que le estés dando un rango inválido o algo así. –

+0

Estoy teniendo el mismo problema. Puedo obtener el rango correcto para el texto que me gustaría seleccionar (el UITextView se desplaza a la posición correcta) pero no hay "resaltado" del texto en el rango ni un punto de inserción. Me pregunto si necesito enviar un mensaje al UITextView para "activar" o algo primero. – jasongullickson

Respuesta

5

La propiedad selectedRange debería hacerlo, pero, como se mencionó en el documentation, sólo en el iPhone OS 3.0 y posterior. En 2.2 y anteriores, la propiedad selectedRange es en realidad un punto de inserción.

+1

Tenga en cuenta que la función para crear un 'NSRange' es' NSMakeRange() 'no' NSRangeMake() 'como cabría esperar. – devios1

4

Como se menciona en la respuesta aceptada, la propiedad selectedRange es lo que necesita, pero tenga en cuenta que si está utilizando el método delegado -textViewDidBeginEditing: puede que necesite aplazar un bucle de ejecución para ganar la inserción generada por el usuario "acción:

- (void)textViewDidBeginEditing:(UITextView *)textView 
{ 
    // Look for the default message and highlight it if present 
    NSRange defaultMsgRange = [textView.text rangeOfString:NSLocalizedString(@"TEXTFIELD_DEFAULT_MESSAGE", nil) options:NSAnchoredSearch]; 

    BOOL isDefaultMsg = !(defaultMsgRange.location == NSNotFound && defaultMsgRange.length == 0); 
    if (isDefaultMsg) { 

     // Need to delay this by one run loop otherwise the insertion wins 
     [self performBlock:^(id sender) { // (BlocksKit - use GCD otherwise) 

      textView.selectedRange = defaultMsgRange; 

     } afterDelay:0.0]; 
    } 
} 
Cuestiones relacionadas