ios - fields - Seleccionar programáticamente todo el texto en UITextField
text area ios (12)
¿Cómo puedo seleccionar programáticamente todo el texto en UITextField?
Acabo de probar esto para verificar el comentario de Mirko anterior, pero mi prueba verifica que selectAll:
de hecho selecciona todo el texto cuando se envía al UITextField.
Tenga en cuenta que el texto se oscurecerá inmediatamente con CUT | COPIA | PASTE las acciones, pero para su pregunta, es exactamente lo que aparece cuando un usuario toca "Seleccionar todo" para comenzar.
La solución con la que me voy sigue, tenga en cuenta que la segunda línea ocultará temporalmente el diálogo CUT / COPY / PASTE, sin deshabilitarlo para selecciones explícitas del usuario
[_myTextField selectAll:self];
[UIMenuController sharedMenuController].menuVisible = NO;
Creo una vista de alerta personalizada que contiene un UITextField
adentro. Encontré un problema para el campo de texto es que: beginningOfDocument
solo tiene valor si textfield se agrega a la pantalla y se llama a becomeFirstResponder
.
De lo contrario, beginningOfDocument
devuelve nil
y [UITextField textRangeFromPosition:]
no puede obtener el valor.
Así que aquí está mi código de muestra para resolver este caso.
UIWindow *window = [[[UIApplication sharedApplication] windows] firstObject];
[window addSubview:theAlertView]; // textfield must be added as a subview of screen first
UITextField *textField = theAlertView.textField;
[textField becomeFirstResponder]; // then call to show keyboard and cursor
UITextRange *range = [textField textRangeFromPosition:textField.beginningOfDocument toPosition:textField.endOfDocument]; // at this time, we could get beginningOfDocument
[textField setSelectedTextRange:range]; // Finally, it works!!!
Eso es lo que hizo el truco para mí:
[self.titleField setSelectedTextRange:[self.titleField textRangeFromPosition:self.titleField.beginningOfDocument toPosition:self.titleField.endOfDocument]];
Bastante feo, pero funciona, por lo que no se mostrará ningúnMenúControlador compartido.
Para solucionar el problema del uso de "solo funciona cada vez", siga estos pasos:
__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
__strong __typeof(weakSelf) strongSelf = weakSelf;
UITextRange *range = [strongSelf textRangeFromPosition:strongSelf.beginningOfDocument toPosition:strongSelf.endOfDocument];
[strongSelf setSelectedTextRange:range];
});
Gracias a Eric Baker (recién editado del comentario aquí)
Esta es la mejor solución que he encontrado. No sharedMenuController, y funciona de forma consecutiva:
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
[textField performSelector:@selector(selectAll:) withObject:nil afterDelay:0.1];
}
Lamentablemente, no creo que puedas hacer eso.
No estoy seguro si esto lo ayuda, pero setClearsOnBeginEditing
permite especificar que UITextField
debe eliminar el valor existente cuando el usuario comienza a editar (este es el valor predeterminado para UITextFields
seguro).
Para poder seleccionar texto, el campo de texto debe ser editable. Para saber cuándo se puede editar el campo de texto, use los métodos de delegado:
- (void)textFieldDidBeginEditing:(UITextField *)textField
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
No creo que textFieldShouldBeginEditing: es obligatorio, pero es lo que utilicé en mi implementación.
- (void)textFieldDidBeginEditing:(UITextField *)textField{
[textField selectAll:textField];
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
return YES;
}
Al pasar in nil para seleccionarTodo: no se mostrará el Menú.
Se apaga, llamando a -selectAll: con un remitente que no es nulo muestra el menú. Llamarlo con nil hace que seleccione el texto, pero no muestra el menú.
Intenté esto después de que mi informe de error sobre esto volviera de Apple con la sugerencia de que pasara nil en lugar de auto.
No es necesario ensuciar con UIMenuController u otras API de selección.
Si quiere decir cómo permitiría que el usuario edite el texto en un uitextfield, simplemente asigne firstResponder a él:
[textField becomeFirstResponder]
Si te refieres a cómo obtienes el texto en el campo de texto, esto lo hará:
textField.text
Si en realidad quiere decir seleccionar el texto (como en resaltarlo), esto puede ser útil:
Swift 3:
textField.selectAll(self)
Usa lo que necesitas
[yourtextField becomeFirstResponder]; //puts cursor on text field
[yourtextField selectAll:nil]; //highlights text
[yourtextField selectAll:self]; //highlights text and shows menu(cut copy paste)
Rápido
Seleccione todo el texto en un UITextField
:
textField.selectedTextRange = textField.textRangeFromPosition(textField.beginningOfDocument, toPosition: textField.endOfDocument)
Mi respuesta completa está here .
UITextField *tf = yourTF;
// hide cursor (you have store default color!!!)
[[tf valueForKey:@"textInputTraits"] setValue:[UIColor clearColor]
forKey:@"insertionPointColor"];
// enable selection
[tf selectAll:self];
// insert your string here
// and select nothing (!!!)
[tf setMarkedText:@"Egor"
selectedRange:NSMakeRange(0, 0)];
¡Hecho!