2010-05-08 32 views
15

Quiero tener que insertar ocasionalmente texto en el objeto de texto UITextView. Por ejemplo, si el usuario presiona el botón "Nuevo párrafo", me gustaría insertar una nueva línea doble en lugar de solo la nueva línea estándar.UITextView insertar texto en el texto de la vista de texto

¿Cómo puedo hacer eso? ¿Debo leer la cadena de UITextView, mutarla y volver a escribirla? Entonces, ¿cómo iba a saber dónde estaba el puntero?

Gracias

+0

posible duplicado de [Sustitución de texto en UITextView con el apoyo NSUndoManager] (http://stackoverflow.com/questions/6419823/replacing-text-in-uitextview-with-nsundomanager-support) –

Respuesta

30

Dado que la propiedad de textUITextView es inmutable, hay que crear una nueva cadena y establezca la propiedad de texto a ella. NSString tiene un método de instancia (-stringByAppendingString:) para la creación de una nueva cadena añadiendo el argumento para el receptor:

textView.text = [textView.text stringByAppendingString:@"\n\n"]; 
+0

necesita tratar con el hecho de que esto podría no estar al final de la cadena. ¿Alguna función similar a insertStringAtPoint? ¿Qué? –

+3

¡Lo encontré! en realidad es insertString: atIndex: –

+7

Es posible que desee establecer textView.scrollEnabled = NO antes de actualizar textView.text; esto evita el molesto desplazamiento al final de la vista de texto –

9

Así es como he implementado y parece que funciona muy bien.

- (void) insertString: (NSString *) insertingString intoTextView: (UITextView *) textView 
{ 
    NSRange range = textView.selectedRange; 
    NSString * firstHalfString = [textView.text substringToIndex:range.location]; 
    NSString * secondHalfString = [textView.text substringFromIndex: range.location]; 
    textView.scrollEnabled = NO; // turn off scrolling or you'll get dizzy ... I promise 

    textView.text = [NSString stringWithFormat: @"%@%@%@", 
     firstHalfString, 
     insertingString, 
     secondHalfString]; 
    range.location += [insertingString length]; 
    textView.selectedRange = range; 
    textView.scrollEnabled = YES; // turn scrolling back on. 

} 
+0

Hola Brian, tengo el mismo problema aquí, intento tu respuesta, puedo insertar el texto, pero la vista de texto siempre salta a la última línea después de insertar el texto, ¿podrías darme otra ayuda? –

+0

@ R.Dewi, configure 'textView.scrollEnabled = NO' antes del cambio y cámbielo después. – Dustin

19

UITextview tiene un método insertText y respeta la posición del cursor.

- (void)insertText:(NSString *)text 

por ejemplo:

[myTextView insertText:@"\n\n"]; 
+4

¿Cómo no es esta la respuesta aceptada? Esta es la forma correcta de hacerlo sin recurrir a hacks. –

+1

@sudo No sé lo que hice mal la última vez que probé esto, ¡pero ahora funciona! ¡Muchas gracias! Esto me salvó el día (especialmente porque respeta la posición del cursor !!!!!!!!!!) – ParkerHalo

+0

@NYCTechEngineer probablemente porque la documentación es pobre y la herencia oculta aún más las cosas y, a menos que se mencione explícitamente en alguna parte, es difícil de encontrar. Finalmente encontré los documentos 'insertText' (https://developer.apple.com/documentation/uikit/uikeyinput), pero no hay enlaces a él y nada lo menciona. –

2
- (void)insertStringAtCaret:(NSString*)string { 
    UITextView *textView = self.contentCell.textView; 

    NSRange selectedRange = textView.selectedRange; 
    UITextRange *textRange = [textView textRangeFromPosition:textView.selectedTextRange.start toPosition:textView.selectedTextRange.start]; 

    [textView replaceRange:textRange withText:string]; 
    [textView setSelectedRange:NSMakeRange(selectedRange.location + 1, 0)]; 

    self.changesDetected = YES; // i analyze the undo manager in here to enabled/disable my undo/redo buttons 
} 
2

Ésta es una respuesta correcta!

La posición del cursor también es correcta.

Una posición de desplazamiento también es correcta.

- (void) insertString: (NSString *) insertingString intoTextView: (UITextView *) textView 
{ 
    [textView replaceRange:textView.selectedTextRange withText:insertingString]; 
} 
2

para SWIFT 3,0

Puede añadir texto llamando al método de insertTextUITextView Instancia.

Ejemplo:

textView.insertText("yourText") 
+1

Esta es una gran opción, muy limpia. Gracias. –

Cuestiones relacionadas