ios - UIButton cambio de color del título resaltado-¿Cómo desactivarlo?
title textcolor (6)
He creado un botón. El color del título es negro por defecto. Pero cuando lo presiono, el color cambia para ser un poco azul y nunca cambia de nuevo, ¿cómo sucede esto? puede alguien decirme por que? Y quiero que el título del botón permanezca negro todo el tiempo. ¿Cómo puedo hacer eso? Yo he tratado
[button setTitleColor:[UIColor darkTextColor] forState:UIControlStateHighlighted];
[button setTitleColor:[UIColor darkTextColor] forState:UIControlStateSelected];
Pero no hay efecto. Cuando agrego esto en mi código, parece que el título del botón siempre es azul.
Código de la siguiente manera.
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(20, 360, 280, 44)];
[button setTitle:NSLocalizedString(@"Continue", @"Label: TextLabel in Continue button") forState:UIControlStateNormal];
button.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:20.0f];
button.titleLabel.textColor = [UIColor darkTextColor];
button.titleLabel.shadowColor = [UIColor blackColor];
button.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleWidth;
[self.view addSubview:button];
[button release];
Gracias a todos. He desviado el problema. Creo que la causa raíz es
button.titleLabel.textColor = [UIColor darkTextColor];
Cuando elimino esto, y uso
button setTitleColor:(UIColor) forState:(UIControlState);
¡El problema esta resuelto!
0 líneas de código:
Usando Interface Builder y .XIB
o .storyboard
, seleccione su UIButton
en IB:
Ver> Utilidades> Mostrar inspector de atributos .
Seleccione Configuración de estado (Predeterminado) a uno de Resaltado , Seleccionado o Deshabilitado y cambie el atributo de Color de texto .
Como señala @null, la forma más sencilla de hacer esto es establecer el tipo de botón en el Creador de interfaces (o en el código) en "Personalizar".
Si necesita replicar este comportamiento con un botón estándar, anule el método setHighlighted
para evitar que el canal alfa de titleLabel se ajuste también:
- (void)setHighlighted:(BOOL)highlighted
{
[super setHighlighted:highlighted];
self.titleLabel.alpha = 1.0;
}
Creo que mayuur tiene razón. ¿Has probado otro color en lugar de "darkTextColor"? Hasta donde yo sé, "darkTextColor" es un color específico del sistema que se utiliza para escribir texto en fondos claros. Tal vez intente blackColor si la sugerencia de mayuurs no funciona.
Editar: intente agregar: [sender setHighlighted:NO];
en su IBAction que se llama al presionar un botón. ¿Lo soluciona? Sugiero esto porque del [button release];
Supongo que todavía está ejecutando una versión anterior del iOs SDK y no tiene la opción de desactivar el resaltado de un botón de una manera elegante que no sea esta.
Edit2: está creando el botón mediante programación, pero no veo que lo conecte con un IBAction. Agregue esto debajo de su [[UIButton alloc] init];
[button addTarget:self action:@selector(myIBAction) forControlEvents:UIControlEventTouchUpInside];
Luego crea un método IBAction como este:
- (IBAction)myIBAction:(UIButton *)sender; /* In Header File */
- (IBAction)myIBAction:(UIButton *)sender{ /* In Implementation File */
[sender setHighlighted:NO];
}
Hay algunos comentarios que lo señalan, pero para tenerlo como una respuesta real:
Establezca el tipo de botón en Custom
en su guión gráfico o en el código: [UIButton buttonWithType:UIButtonTypeCustom];
Para algo un poco más reutilizable puede considerar esto, ya que no viola el principio DRY. Agregue esto como una categoría en UIButton.
- (void)oka_setTitleColor:(UIColor *)color forStates:(NSArray *)states;
{
[states enumerateObjectsUsingBlock:^(NSNumber *state, NSUInteger idx, BOOL *stop) {
[self setTitleColor:color forState:[state integerValue]];
}];
}
ejemplo de uso para su caso:
[self oka_setTitleColor:[UIColor darkTextColor]
forStates:@[@(UIControlStateNormal), @(UIControlStateHighlighted), @(UIControlStateSelected)]];
puedes usar
[UIButton setTitleColor: forState:]
para todos los estados, el color del título seguirá siendo el mismo para todos los estados.
[button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor redColor] forState:UIControlStateSelected];
Nota: Para evitar escribir o pegar el código anterior tres veces, puede usar el siguiente código sugerido por Will,
[button setTitleColor:[UIColor redColor] forState:(UIControlStateHighlighted | UIControlStateNormal | UIControlStateSelected)];