ios uitextfield

ios - ¿Cómo configurar el color del texto del marcador de posición para un UITextField mientras conserva sus propiedades existentes?



uitextfielddelegate (5)

De hecho, hay una manera mucho mejor de manejar esto ahora. Esto funcionará para iOS 6 y 7.

(Tenga en cuenta este ejemplo: creé el código en AwakeFromNib ya que no cambiará de color una vez que se haya establecido. Pero si no usa XIB, tendrá que cambiar la ubicación donde coloca este código, como en drawPlaceholderInRect)

En este ejemplo, creamos una subclase de UITextField, sustituimos a awakeFromNib y luego configuramos el color del texto placeHolder en rojo:

- (void)awakeFromNib { if ([self.attributedPlaceholder length]) { // Extract attributes NSDictionary * attributes = (NSMutableDictionary *)[ (NSAttributedString *)self.attributedPlaceholder attributesAtIndex:0 effectiveRange:NULL]; NSMutableDictionary * newAttributes = [[NSMutableDictionary alloc] initWithDictionary:attributes]; [newAttributes setObject:[UIColor redColor] forKey:NSForegroundColorAttributeName]; // Set new text with extracted attributes self.attributedPlaceholder = [[NSAttributedString alloc] initWithString:[self.attributedPlaceholder string] attributes:newAttributes]; } }

Lo bueno de este enfoque es que mantiene las propiedades actuales de UITextField para la cadena placeHolder y por lo tanto le permitirá trabajar en IB para la mayor parte de lo que establezca. Además, es mucho más eficiente que hacerlo cada vez que necesites dibujar. También le permite cambiar cualquier otra propiedad que desee en el texto placeHolder mientras mantiene el resto de las propiedades.

Como se mencionó anteriormente, si no usa XIB, deberá llamar a esto en otro momento. Si coloca este código en el método drawPlaceholderInRect:, asegúrese de llamar [super drawPlaceholderInRect:] al final.

He visto algunas respuestas que muestran cómo cambiar el color del texto placeHolder para UITextField al anular el método drawPlaceholderInRect: como este:

iPhone UITextField - Cambiar el color del texto del marcador de posición

pero eso no mantiene los atributos existentes como alineación, fuente, etc. ¿Cuál es la mejor manera de resolver esto?


Desde iOS 6,

Sin ninguna subclase, uno puede lograr esto con un par de líneas de código así:

UIColor *color = [UIColor blackColor]; textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:placeholderText attributes:@{NSForegroundColorAttributeName: color}];


Hay múltiples maneras de lograr esto.

Usando Interface Builder o Storyboard

  • Seleccione el campo de texto para el que desea cambiar el color del marcador de posición
  • Vaya al menú del inspector de identidad en la parte superior derecha de Xcode
  • Agregue el par de valores clave de esta manera

_placeholderLabel.textColor clave = _placeholderLabel.textColor

Haga clic en el atributo Tipo y elija Color.

Luego seleccione el color en valor.

Establecer el color del marcador de posición usando código :

Proceso 1:

[textField setValue:[UIColor blueColor] forKeyPath:@"_placeholderLabel.textColor"];

Proceso 2:

Reemplace drawPlaceholderInRect: (CGRect) método rect

- (void) drawPlaceholderInRect:(CGRect)rect { [[UIColor blueColor] setFill]; [[self placeholder] drawInRect:rect withFont:[UIFont systemFontOfSize:14]]; }


La forma segura de personalizar el marcador de posición de UITextField es subclasificar el UITextField y anular el placeholderRectForBounds: Apple no lo molestará en este caso. Sin embargo, si desea tomar el riesgo, puede intentar de esta manera:

[self.MyTextField setValue:[UIColor darkGrayColor] forKeyPath:@"_placeholderLabel.textColor"];

Source


aquí Vea mi salida Esto es solo para obtener el nombre de la fuente del sistema

for (NSString *familyName in [UIFont familyNames]) { for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) { NSLog(@"%@", fontName);

Y añada este código en su viewDidLoad

_textFieldEmail.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"e-mail address" attributes:@{ NSFontAttributeName : [UIFont fontWithName:@"Roboto-LightItalic" size:17.0] } ]; _textFieldPassword.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"password" attributes:@{ NSFontAttributeName : [UIFont fontWithName:@"Roboto-LightItalic" size:17.0] } ];