Change Text Color of Items in UIActionSheet - iOS 8 Change Text Color of Items in UIActionSheet - iOS 8 ios ios

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]];