Me pregunto sobre cambiar el color del cursor / cursor en un UITextField
(Y UITextView
si es la misma respuesta) en iOS. He visto respuestas para el desarrollo de OSX, pero nada para iOS.
¿Es esto posible?
Me pregunto sobre cambiar el color del cursor / cursor en un UITextField
(Y UITextView
si es la misma respuesta) en iOS. He visto respuestas para el desarrollo de OSX, pero nada para iOS.
¿Es esto posible?
Respuestas:
Si está apuntando a iOS 7+, esto se ha hecho mucho más fácil. Simplemente cambie el tintColor
campo con un cursor usando el proxy de apariencia y se aplicará en toda la aplicación:
Swift 3.0:
UITextField.appearance().tintColor = .black
C objetivo:
[[UITextField appearance] setTintColor:[UIColor blackColor]];
La misma respuesta aplica para un individuo UITextField
:
Swift 3.0:
myTextField.tintColor = .black
C objetivo
[myTextField setTintColor:[UIColor blackColor]];
Swift 3:
UITextField.appearance().tintColor = UIColor.black
UITextView.appearance().tintColor = UIColor.black
Nota: Esta respuesta está desactualizada y debe usarse solo para el desarrollo anterior a iOS 7. Vea otras respuestas para una solución de 1 línea usando el proxy de apariencia en iOS 7.
Llegué a esta pregunta después de enfrentar el mismo problema en un proyecto en el que estaba trabajando.
Logré crear una solución que será aceptada por el equipo de revisión de AppStore, ya que no utiliza ninguna API privada existente.
He creado un control llamado DGTextField que extiende UITextField.
yourTextField.tintColor = [UIColor whiteColor];
Funciona si lo configura en código, porque de alguna manera el disparador de color no lo hace en el Creador de interfaces (Xcode 6.1.1). Se adapta bien sin necesidad de cambiar ningún proxy de apariencia.
Configuración tintColor
de UITextField
y UITextView
funciona de forma diferente. Si bien UITextField
no necesita llamar a un código adicional después de la actualización tintColor
para cambiar el color del cursor, pero sí UITextView
lo necesita.
Así que después de ajustar tintColor
para UITextView
(no importa en IB o en el código) es necesario llamar textView.tintColorDidChange()
con el fin de aplicarlo (en realidad pasará de configuración de vista de texto a su jerarquía subvistas).
Esto me funcionó rápidamente:
UITextField.tintColor = UIColor.blackColor()
También puede configurar esto en el guión gráfico: https://stackoverflow.com/a/18759577/3075340
Instance member 'tintcolor' cannot be used on type 'UITextField'
Un enfoque más general sería establecer el tintColor de la apariencia de UIView.
UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];
Tiene sentido si está utilizando muchos elementos de IU predeterminados.
[UIView appearance]
Intenta, está funcionando para mí.
[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor redColor] strong textforKey:@"insertionPointColor"];
Solo es posible accediendo a una propiedad privada y, por lo tanto, puede provocar el rechazo de la aplicación Apple AppStore.
El enfoque de Durgesh funciona.
También usé tales soluciones KVC muchas veces. A pesar de que parece no estar documentado, pero funciona. Francamente, no utiliza ningún método privado aquí, solo la codificación de valor clave que es legal.
PD: 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.
Para la versión de Interface Builder con Swift
@IBOutlet weak var tvValue: UITextView! {
didSet {
tvValue.tintColor = .black
}
}
Si el UITextField
es de UISearchBar
, primero obtenga el textField
de searchBar
y luego aplique la tintColor
propiedad:
let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray
Creo que si desea algunos colores personalizados, puede ir a la Assets.xcassets
carpeta, hacer clic derecho y seleccionar New Color Set
, una vez que haya creado el color que configuró, asígnele un nombre para reutilizarlo.
Y puedes usarlo así:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UITextField.appearance().tintColor = UIColor(named: "YOUR-COLOR-NAME") #here
}
}
Probado en macOS 10.15 / iOS 13 / Swift 5
UITextField
, incluyendo cómo hacer esto en Interface Builder, en stackoverflow.com/a/18759577/1709587