Change Text Color of Items in UIActionSheet - iOS 8
There's an easy way if you still want to use UIActionSheet
instead of UIAlertController
in order to support older iOS versions.
UIActionSheet
actually uses UIAlertController
in iOS 8, and it has a private property _alertController
.
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.}
For Swift Below code should works
let alertAction = UIAlertAction(title: "XXX", style: .default) { (action) in } alertAction.setValue(UIColor.red, forKey: "titleTextColor")
To change the button title color you need to use UIAlertController
and set the tintColor
of the main view
.
Example of setting the button title colors to black:
UIAlertController *actionSheetController = [UIAlertController alertControllerWithTitle:@"How would you like to proceed?" message:@"" preferredStyle:UIAlertControllerStyleActionSheet];UIAlertAction *finish = [UIAlertAction actionWithTitle:@"Finish" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { [self performSelector:@selector(finish:) withObject:nil]; }];UIAlertAction *playAgain = [UIAlertAction actionWithTitle:@"Play Again" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { [self performSelector:@selector(playAgain:) withObject:nil]; }];UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { [actionSheetController dismissViewControllerAnimated:YES completion:nil]; }];[actionSheetController addAction:finish];[actionSheetController addAction:playAgain];[actionSheetController addAction:cancel];//******** THIS IS THE IMPORTANT PART!!! ***********actionSheetController.view.tintColor = [UIColor blackColor];[self presentViewController:actionSheetController animated:YES completion:nil];
Ok, I ran into the same problem but I think I have found a solution:
The appropriate way should be like this and I guess it works in iOS7:
[[UIButton appearanceWhenContainedIn:[UIActionSheet class], nil] setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
But it will not work in iOS8 due to the fact that the ActionSheets "buttons" is now based on a UICollectionView.So after some digging around I got this to work instead:
[[UICollectionView appearanceWhenContainedIn:[UIAlertController class], nil] setTintColor:[UIColor blueColor]];