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];
}
}
¿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í. –
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