2011-05-27 13 views
17

Tengo un 3 UITextField con un conjunto de texto de marcador de posición. En uno de los UITextField, quiero que el texto del marcador de posición sea rojo.Cómo puedo subclase UITextField y anulo drawPlaceholderInRect para cambiar el color de marcador de posición

Ahora, después de googlear, parece que la mejor manera de hacer esto es subclase UITextField y anular drawPlaceholderInRect.

¿Cómo hago para crear subclases y anular drawPlaceholderInRect? No he encontrado ningún ejemplo de código o tutorial sobre esto y soy nuevo en el desarrollo de Object-c y iOS, por lo que resulta difícil resolverlo.

Respuesta:

creado una nueva clase Objective-C, que se llama CustomUITextFieldPlaceholder subclase UITextField. En CustomUITextFieldPlaceholder.m poner el siguiente código

@implementation CustomUITextFieldPlaceholder 

- (void)drawPlaceholderInRect:(CGRect)rect { 
    // Set colour and font size of placeholder text 
    [[UIColor redColor] setFill]; 
    [[self placeholder] drawInRect:rect withFont:[UIFont systemFontOfSize:12]]; 
} 

@end 

Para implementar lo anterior en su proyecto

#import "CustomUITextFieldPlaceholder.h" 

y

IBOutlet CustomUITextFieldPlaceHolder *txtName; 

Nota: Esto funciona y creo que es la práctica correcta, sin embargo tengo no completamente probado. Espero que este ejemplo ayude a otros en mi situación.

Editar:

Cambiado

[[UIColor redColor] setFill]; 

para

[[UIColor colorWithRed:255.0 green:0.0 blue:0.0 alpha:0.7] setFill]; 

para que pudiera establecer la opacidad al 70% para imitar marcador de posición por defecto.

+0

subclases y anulando ese método no le ayudará a cambiar el color de fuente, que sólo permite personalizar donde se muestra el marcador de posición. –

+0

quizás pueda intentar anular este método de delegado - '(void) drawPlaceholderInRect: (CGRect) rect' – Hisenberg

Respuesta

7

Para responder a la pregunta específica, así es como funciona subclases:

// CustomTextField.h 
@interface CustomTextField : UITextField { 
} 
@end 

Así es como reemplazar el método:

@implementation 
- (CGRect)placeholderRectForBounds:(CGRect)bounds { 
    return CGRectMake(x,y,width,height); 
} 
@end 

Sin embargo no creo que ese es el método que desea anular . Creo que esto es lo que está buscando:

@implementation 
- (void)drawPlaceholderInRect:(CGRect)rect { 
    // Your drawing code. 
} 
@end 
+0

Gracias por su respuesta @Erik, su derecha me refería a drawPlaceholderInRect.Voy a intentar crear el código para hacer esto, con los dedos cruzados :) –

+0

pero después de crear la clase y agregar este método en la implementación no puedo cambiar el color del marcador de posición de mi campo de texto –

0
[yourTextfield setValue:[UIColor colorWithRed:62.0/255.0f green:62.0/255.0f blue:62./255.0f alpha:1.0f] forKeyPath:@"_placeholderLabel.textColor"]; 

creo que esto sería útil

+0

Ese guión bajo lo hace parecer bastante privado ... –

Cuestiones relacionadas