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


Me gustaría cambiar el color del texto de marcador de posición que configuré en mi UITextField controles, para hacerlo negro.

Preferiría hacer esto sin utilizar 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 ser capaz de hacer esto. Pero no estoy seguro de cómo acceder al objeto marcador de posición real desde este método.


502
2017-08-27 10:36


origen


Respuestas:


Desde la introducción de cadenas atribuidas en UIViews en iOS 6, es posible asignar un color al texto del marcador de posición de esta manera:

if ([textField respondsToSelector:@selector(setAttributedPlaceholder:)]) {
  UIColor *color = [UIColor blackColor];
  textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:placeholderText attributes:@{NSForegroundColorAttributeName: color}];
} else {
  NSLog(@"Cannot set placeholder text's color, because deployment target is earlier than iOS 6.0");
  // TODO: Add fall-back code to set placeholder color.
}

767
2017-12-04 03:08



Fácil y sin dolor, podría ser una alternativa fácil para algunos.

_placeholderLabel.textColor

No sugerido para la producción, Apple puede rechazar su presentación.


226
2018-02-25 14:28



Puede anular drawPlaceholderInRect: (CGRect) rect como tal para representar manualmente el texto del marcador de posición:

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

190
2017-08-03 11:35



Tal vez quieras probar de esta manera, pero Apple podría advertirte sobre el acceso a ivar privado:

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

NOTA
Esto ya no funciona en iOS 7, según Martin Alléus.


156
2018-01-04 07:53



Puede cambiar el texto de marcador de posición en cualquier color que desee utilizando el código siguiente.

UIColor *color = [UIColor lightTextColor];
YOURTEXTFIELD.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"PlaceHolder Text" attributes:@{NSForegroundColorAttributeName: color}];

152
2017-11-08 06:18



Esto funciona en Swift <3.0:

myTextField.attributedPlaceholder = 
NSAttributedString(string: "placeholder text", attributes: [NSForegroundColorAttributeName : UIColor.redColor()])

Probado en iOS 8.2 y iOS 8.3 beta 4.

Swift 3:

 myTextfield.attributedPlaceholder =
  NSAttributedString(string: "placeholder text", attributes: [NSForegroundColorAttributeName : UIColor.red])

102
2018-01-06 11:50



En Swift:

if let placeholder = yourTextField.placeholder {
    yourTextField.attributedPlaceholder = NSAttributedString(string:placeholder, 
        attributes: [NSForegroundColorAttributeName: UIColor.blackColor()])
}

En Swift 4.0:

if let placeholder = yourTextField.placeholder {
    yourTextField.attributedPlaceholder = NSAttributedString(string:placeholder, 
        attributes: [NSAttributedStringKey.foregroundColor: UIColor.black])
}

60
2017-12-11 16:22



Lo siguiente solo con iOS6 + (como se indica en el comentario de Alexander W):

UIColor *color = [UIColor grayColor];
nameText.attributedPlaceholder =
   [[NSAttributedString alloc]
       initWithString:@"Full Name"
       attributes:@{NSForegroundColorAttributeName:color}];

43
2018-05-19 06:33