react activity actionsheet ios uiactionsheet

ios - activity - Cambiar el color del texto en los botones UIActionSheet



uialertcontroller (10)

En mi proyecto, estoy usando UIActionSheet para mostrar para algún tipo de clasificación. Quiero cambiar el color del texto que se muestra en los botones de la hoja de acciones. ¿Cómo podemos cambiar el color del texto?


En iOS 8, nada de esto funciona más. El texto de UIActionSheet parece obtener su color de window.tintColor.


Esto funciona para mí en iOS8

[[UIView appearanceWhenContainedIn:[UIAlertController class], nil] setTintColor:[UIColor redColor]];


La solución @jrc funciona, pero el color de TitleLabel cambia cuando toca el botón. Intenta esto para mantener el mismo color en todos los estados.

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet { UIColor *customTitleColor = [UIColor greenColor]; for (UIView *subview in actionSheet.subviews) { if ([subview isKindOfClass:[UIButton class]]) { UIButton *button = (UIButton *)subview; [button setTitleColor:customTitleColor forState:UIControlStateHighlighted]; [button setTitleColor:customTitleColor forState:UIControlStateNormal]; [button setTitleColor:customTitleColor forState:UIControlStateSelected]; } } }


Puede ser una respuesta tardía, pero creo que podría ayudar a alguien.

iOS 8: simplemente puede inicializar su UIAlertAction con el estilo: UIAlertActionStyleDestructive, de esta manera:

UIAlertAction *delete = [UIAlertAction actionWithTitle:@"Delete" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action){ // your code in here }];

Esto hará que el texto del botón sea rojo por defecto.


Si alguna vez desea ir a través de las UIActionSheet de UIActionSheet, no debe establecer directamente el color del texto de UILabel sino usar el UIButton setTitleColor:forState . De lo contrario, el color inicial se reestablecerá en eventos como UIControlEventTouchDragOutside, por ejemplo.

Esta es la forma correcta de hacerlo, reutilizando el código de jrc:

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet { for (UIView *subview in actionSheet.subviews) { if ([subview isKindOfClass:[UIButton class]]) { UIButton *button = (UIButton *)subview; [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; } } }


Soulution para Swift 3 . Cambia todos los colores.

UIView.appearance(whenContainedInInstancesOf: [UIAlertController.self]).tintColor = .yellow


UIAppearance puede manejar esto:

[[UIButton appearanceWhenContainedIn:[UIActionSheet class], nil] setTitleColor:[UIColor cyanColor] forState:UIControlStateNormal];

Mucho más fácil que pasar por las subvistas, pero no he probado esta solución en iOS 6 o anterior.


usa esto para iOS 8 y superior

SEL selector = NSSelectorFromString(@"_alertController"); if ([actionSheet respondsToSelector:selector]) { UIAlertController *alertController = [actionSheet valueForKey:@"_alertController"]; if ([alertController isKindOfClass:[UIAlertController class]]) { alertController.view.tintColor = [UIColor blueColor]; } } else { // use other methods for iOS 7 or older. }


EDITAR

Aquí hay una pregunta similar: ¿Cómo personalizar los botones en UIActionSheet?

Intenta usar el protocolo de appearance [ NO FUNCIONANDO ]

UIButton *btn = [UIButton appearanceWhenContainedIn:[UIActionSheet class], nil]; [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];


iOS 8: UIActionSheet está en desuso. UIAlertController respeta -[UIView tintColor] , así que esto funciona:

alertController.view.tintColor = [UIColor redColor];

Mejor aún, configure el color del tinte de la ventana en el delegado de su aplicación:

self.window.tintColor = [UIColor redColor];

iOS 7: en su delegado de la hoja de acciones, implemente -willPresentActionSheet: siguiente manera:

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet { for (UIView *subview in actionSheet.subviews) { if ([subview isKindOfClass:[UIButton class]]) { UIButton *button = (UIButton *)subview; [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; } } }