UITextField establece un color de marcador de position tan oscuro en iOS

He intentado configurar el UITextField "Placeholder" de UITextField como oscuro.

 NSAttributedString * search = [[NSAttributedString alloc] initWithString:@"Search" attributes:@{NSForegroundColorAttributeName: [UIColor blackColor]}]; textField.attributedPlaceholder = search; 
  • Pero aún UITextField muestra un color gris claro en "Placeholder" .

  • ¿Es posible establecer un color oscuro "marcador de position" para UITextField ?

También he probado el otro método también

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

Pero ambos methods funcionan en iOS 7 , pero no funciona en iOS 6 .

  • ¿Es posible establecer un color oscuro "marcador de position" para UITextField en el objective iOS 6 ?

¡Gracias!

    Como sugirió Apple, subclassar UITextField y anular - (void)drawPlaceholderInRect:(CGRect)rect es el path a seguir:

     - (void)drawPlaceholderInRect:(CGRect)rect { UIColor *colour = [UIColor lightGrayColor]; if ([self.placeholder respondsToSelector:@selector(drawInRect:withAttributes:)]) { // iOS7 and later NSDictionary *attributes = @{NSForegroundColorAttributeName: colour, NSFontAttributeName: self.font}; CGRect boundingRect = [self.placeholder boundingRectWithSize:rect.size options:0 attributes:attributes context:nil]; [self.placeholder drawAtPoint:CGPointMake(0, (rect.size.height/2)-boundingRect.size.height/2) withAttributes:attributes]; } else { // iOS 6 [colour setFill]; [self.placeholder drawInRect:rect withFont:self.font lineBreakMode:NSLineBreakByTruncatingTail alignment:self.textAlignment]; } } 

    Crédito: http://www.brightec.co.uk/blog/how-change-colour-uitextfields-placeholder-text-ios7-and-still-support-ios6

    drawPlaceholderInRect: el drawPlaceholderInRect: método para dibujar nuestro propio text de marcador de position.

     - (void)drawPlaceholderInRect:(CGRect)rect { UIColor *colour = [UIColor darkColor]; if ([self.placeholder respondsToSelector:@selector(drawInRect:withAttributes:)]) { // iOS7 and later NSDictionary *attributes = @{NSForegroundColorAttributeName: colour, NSFontAttributeName: self.font}; CGRect boundingRect = [self.placeholder boundingRectWithSize:rect.size options:0 attributes:attributes context:nil]; [self.placeholder drawAtPoint:CGPointMake(0, (rect.size.height/2)-boundingRect.size.height/2) withAttributes:attributes]; } else { // iOS 6 [colour setFill]; [self.placeholder drawInRect:rect withFont:self.font lineBreakMode:NSLineBreakByTruncatingTail alignment:self.textAlignment]; } } 

    O

    Este caso probablemente se cuelgue si la variable interna cambia en el futuro.

    Programáticamente:

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

    En UIStoryBoard :

    introduzca la descripción de la imagen aquí

    O

    EDIT: Jugando con los delegates UITextFiled. Es como un truco:

     -(void)viewDidLoad{ self.mytxtField.text = @"PlaceholderText"; self.mytxtField.delegate = self; self.mytxtField.textColor = [UIColor darkGrayColor]; } -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ if ([self.mytxtField.text isEqualToString: @"PlaceholderText"]) { self.mytxtField.text = @""; self.mytxtField.textColor = [UIColor blackColor]; } } -(void)textFieldDidEndEditing:(UITextField *)textField{ if ([self.mytxtField.text length]<1) { self.mytxtField.text =@"PlaceholderText"; self.mytxtField.textColor = [UIColor darkGrayColor]; } 

    Para iOS8, puede aprovechar @IBDesignable y @IBInspectable .

    Aquí hay una subclass UITextField en Swift que le permite configurar el color del marcador de position en Interface Builder y ver el resultado al instante:

     @IBDesignable class EDTextField: UITextField { @IBInspectable var placeholderColor: UIColor = UIColor.whiteColor() { didSet { if let placeholder = self.placeholder { let attributes = [NSForegroundColorAttributeName: placeholderColor] attributedPlaceholder = NSAttributedString(string: placeholder, attributes: attributes) } } } } 

    Es muy sencillo….

    Intenta esto para cambiar el color del text del marcador de position.

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

    Prueba esto

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

    Para que sea a testing de futuro y completamente personalizable (color, fuente, tamaño, etc.), solo agregaría un UILabel en la parte superior y lo ocultaré / mostraré manualmente de acuerdo con los contenidos de UITextField .

    Simplemente asegúrate de configurar userInteractionEnabled la label en NO .

    Cambiará el textField textCield paletaColor

     [yourTextField setValue:[UIColor colorWithRed:150.0f/255.0f green:150.0f/255.0f blue:155.0f/255.0f alpha:1] forKeyPath:@"_placeholderLabel.textColor"]; 

    Aquí está la última manera de cambiar FONT y COLOR del text de marcador de position.

      self.emailField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"Email" attributes:@{NSForegroundColorAttributeName:[UIColor whiteColor],NSFontAttributeName :[UIFont fontWithName:@"OpenSans" size:14.0]}];