Me gustaría cambiar el color del texto del marcador de posición que configuré en mis UITextField
controles, para que sea negro.
Preferiría hacer esto sin usar texto normal como marcador de posición y tener que anular todos los métodos para imitar el comportamiento de un marcador de posición.
Creo que si anulo este método:
- (void)drawPlaceholderInRect:(CGRect)rect
entonces debería poder hacer esto. Pero no estoy seguro de cómo acceder al objeto marcador de posición real desde este método.
ios
uitextfield
Adán
fuente
fuente
attributedPlaceholder
dice que usa atributos de texto, excepto el color.[[NSAttributedString alloc] initWithString:@"placeholder" attributes: @{NSForegroundColorAttributeName: color, NSFontAttributeName : font}];
[<UITextField 0x11561d90> valueForUndefinedKey:]: this class is not key value coding-compliant for the key _field.
Fácil y sin dolor, podría ser una alternativa fácil para algunos.
No sugerido para producción, Apple puede rechazar su envío.
fuente
_placeholderLabel
es una propiedad privada. Esta solución está sujeta a ser rechazada por el uso de API privada.Puede anular
drawPlaceholderInRect:(CGRect)rect
como tal para representar manualmente el texto del marcador de posición:fuente
[self.placeholder drawInRect:rect withFont:self.font lineBreakMode:UILineBreakModeTailTruncation alignment:self.textAlignment];
es probablemente mejor. De esa manera respetará latextAlignment
propiedad. He agregado esto a mi clase SSTextField . Siéntase libre de usar en sus proyectos.Puede cambiar el color de texto del marcador de posición a cualquier color que desee utilizando el siguiente código.
fuente
Tal vez quiera intentarlo de esta manera, pero Apple podría advertirle sobre el acceso a ivar privado:
NOTA
Esto ya no funciona en iOS 7, según Martin Alléus.
fuente
Access to UITextField's _placeholderLabel ivar is prohibited. This is an application bug
😈Esto funciona en Swift <3.0:
Probado en iOS 8.2 y iOS 8.3 beta 4.
Swift 3:
Swift 4:
Swift 4.2:
fuente
En Swift:
En Swift 4.0:
fuente
Swift 3.0 + Storyboard
Para cambiar el color del marcador de posición en el guión gráfico, cree una extensión con el siguiente código. (siéntase libre de actualizar este código, si lo cree, puede ser más claro y seguro).
Versión Swift 4
Versión Swift 5
fuente
NSAttributedStringKey
.Lo siguiente solo con iOS6 + (como se indica en el comentario de Alexander W):
fuente
Ya me había enfrentado a este problema. En mi caso, el código a continuación es correcto.
C objetivo
Para Swift 4.X
Para iOS 13 Swift Code
También puede usar el siguiente código para iOS 13
Espero que esto te pueda ayudar.
fuente
viewWillAppear
oviewDidAppear
.viewDidLoad
es muy tempranoCon esto podemos cambiar el color del texto del marcador de posición del campo de texto en iOS
fuente
¿Por qué no usas el
UIAppearance
método?fuente
También en su guión gráfico, sin una sola línea de código
fuente
en swift 3.X
en Swift 5
fuente
Para iOS 6.0 +
Espero eso ayude.
Nota: Apple puede rechazar (0.01% de posibilidades) su aplicación ya que estamos accediendo a una API privada. Lo uso en todos mis proyectos desde hace dos años, pero Apple no me lo pidió.
fuente
terminating with uncaught exception of type NSException
para iOS8Para los desarrolladores de Xamarin.iOS, lo encontré en este documento https://developer.xamarin.com/api/type/Foundation.NSAttributedString/
fuente
new NSAttributedString("placeholderstring", new CTStringAttributes() { ForegroundColor = UIColor.Blue.CGColor });
Versión rápida Probablemente ayudaría a alguien.
fuente
Categorías FTW. Podría optimizarse para verificar un cambio de color efectivo.
fuente
Para manejar tanto la alineación vertical y horizontal como el color del marcador de posición en iOS7. drawInRect y drawAtPoint ya no usan el contexto actual fillColor.
https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/CustomTextProcessing/CustomTextProcessing.html
Obj-C
fuente
iOS 6 y ofertas posteriores
attributedPlaceholder
sobreUITextField
. iOS 3.2 y posteriores ofertassetAttributes:range:
enNSMutableAttributedString
.Puedes hacer lo siguiente:
fuente
Esta solución para Swift 4.1
fuente
La anulación
drawPlaceholderInRect:
sería la forma correcta, pero no funciona debido a un error en la API (o la documentación).El método nunca se llama en un
UITextField
.Vea también drawTextInRect en UITextField no llamado
Puede usar la solución de digdog. Como no estoy seguro de si eso pasa la revisión de Apple, elegí una solución diferente: superponer el campo de texto con mi propia etiqueta que imita el comportamiento del marcador de posición.
Sin embargo, esto es un poco desordenado. El código se ve así (tenga en cuenta que estoy haciendo esto dentro de una subclase de TextField):
fuente
Soy nuevo en xcode y encontré una forma de evitar el mismo efecto.
Coloqué un uilabel en lugar del marcador de posición con el formato deseado y lo escondí en
Estoy de acuerdo en que es una solución y no una solución real, pero el efecto fue el mismo que obtuve de este enlace
NOTA: Todavía funciona en iOS 7: |
fuente
Swift 5 CON CAVEAT.
La advertencia es que DEBES ingresar un
String
espacio no vacío donde esté "DON'T_DELETE", incluso si esa cadena está establecida en el código en otro lugar. Puede ahorrarte cinco minutos de rascarse la cabeza.fuente
Lo mejor que puedo hacer para iOS7 y menos es:
fuente
Para aquellos que usan Monotouch (Xamarin.iOS), aquí está la respuesta de Adam, traducida a C #:
fuente
Font
propiedad del campo de texto.Necesitaba mantener la alineación del marcador de posición, por lo que la respuesta de Adam no fue suficiente para mí.
Para resolver esto, utilicé una pequeña variación que espero ayude a algunos de ustedes también:
fuente
UILineBreakModeTailTruncation
está en desuso a partir de iOS 6.fuente
Para establecer un marcador de posición de campo de texto atribuido con varios colores,
Simplemente especifique el texto,
Salida: -
fuente
Otra opción que no requiere subclases: deje el marcador de posición en blanco y coloque una etiqueta en la parte superior del botón de edición. Administre la etiqueta tal como lo haría con el marcador de posición (borrado una vez que el usuario ingresa algo ...)
fuente