Desactivar el cursor parpadeante en UITextField?
uidatepicker (10)
He seguido las instrucciones here y he configurado con éxito un UITextField que se actualiza con un UIDatePicker. Sin embargo, el cursor en el UITextField está parpadeando, lo que me parece un poco incómodo. ¿Hay alguna solución para deshacerse de ese cursor?
Comprendo que esta es una pregunta antigua, pero con las actualizaciones de iOS 7, ahora es posible ocultar el cursor haciendo lo siguiente:
[[self textFieldName] setTintColor:[UIColor clearColor]];
Sin embargo, solo funcionará en iOS 7+.
El enfoque de Balaji funciona.
También utilicé tales soluciones KVC muchas veces. A pesar de que parece estar indocumentado, pero funciona. Francamente, no utiliza ningún método privado aquí, solo la codificación de valor-clave que es legal.
Es drásticamente diferente de [addNewCategoryTextField textInputTraits].
PS Ayer mi nueva aplicación apareció en AppStore sin ningún problema con este enfoque. Y no es el primer caso cuando uso KVC para cambiar algunas propiedades de solo lectura (como navigatonBar) o ivars privados.
Encontré que esta solución es la más fácil de implementar.
Asegúrese de definir UITextFieldDelegate en su archivo .h:
.... UIViewController <UITextFieldDelegate>
En su archivo .m, agregue esto al método que llama para el selector de fechas:
[yourTextField resignFirstResponder];
Esto evitará que el campo de texto parpadee.
Espero que te sea de utilidad.
Establecer cursor UIColor -> Vacío.
[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor clearColor] forKey:@"insertionPointColor"];
En Swift: 2.3
self.textField.valueForKey("textInputTraits")?.setValue(UIColor.clearColor() , forKey:"insertionPointColor")
Lo que hice fue superponer otro UITextField encima del que tenía el cursor que quería ocultar. Luego, en el método delegado textFieldShouldBeginEditing, configuro el otro textField para que sea el primer respondedor y devolví NO.
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
if (textField.tag==TAG_OF_DUMMY_TEXTFIELD) {
[otherField becomeFirstResponder];
return NO;
}
return YES;
}
Y luego en el método el selector de fechas llama:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@YOUR_DATE_FORMAT];
dummyField.text = [dateFormatter stringFromDate:datePicker.date];
En Interface Builder, otro Campo (el que tiene la vista de entrada datePicker) está detrás de dummyField (el que oculta el cursor).
No pude conseguir que la solución de jcm funcionara. Lo que terminé haciendo fue a la subclase UILabel para imitar la funcionalidad interactiva de un UITextField sin las partes que no quería (como el cursor). Escribí una publicación de blog al respecto aquí:
http://pietrorea.com/2012/07/how-to-hide-the-cursor-in-a-uitextfield/
Básicamente, la subclase UILabel necesita sobrescribir isUserInteractionEnabled, inputView, inputViewAccessory y canBecomeFirstResponder. Son solo unas pocas líneas de código y tiene más sentido.
Puede agregar una propiedad de BOOL cursorless
a UITextField
en una categoría a través de objetos asociados.
@interface UITextField (Cursorless)
@property (nonatomic, assign) BOOL cursorless;
@end
Luego use el método swizzling para caretRectForPosition:
con un método que alterna entre CGRectZero
y su valor predeterminado usando el cursorless
.
Esto conduce a una interfaz simple a través de una categoría de acceso directo. Esto se demuestra en los siguientes archivos.
Simplemente déjalos y obtén el beneficio de esta sencilla interfaz
Categoría UITextField
: https://github.com/rexmas/RexDK/blob/master/RexDK/UI/UITextField%2BRXCursorless.h https://github.com/rexmas/RexDK/blob/master/RexDK/UI/UITextField%2BRXCursorless.m
Método Swizzling: https://github.com/rexmas/RexDK/blob/master/RexDK/Foundation/NSObject%2BRXRuntimeAdditions.h https://github.com/rexmas/RexDK/blob/master/RexDK/Foundation/NSObject%2BRXRuntimeAdditions.m
Subclase UITextfield y Override - (CGRect)caretRectForPosition:(UITextPosition *)position
método de - (CGRect)caretRectForPosition:(UITextPosition *)position
y retorno CGRectZero
.
- (CGRect)caretRectForPosition:(UITextPosition *)position {
return CGRectZero;
}
Totalmente tonto, pero si establece el color del tinte del campo de texto en la sección UIView
del inspector de propiedades de Interface Builder para que coincida con el color de fondo, el cursor aparecerá invisible: