Change Text Color of Items in UIActionSheet - iOS 8

ios, ios8, uiactionsheet, uiactionsheetdelegate

Solution

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")

Problem

I had been using following code to change text color of items which I add in `UIActionSheet`.: ``` - (void)willPresentActionSheet:(UIActionSheet *)actionSheet { for (UIView *subview in actionSheet.subviews) { if ([subview isKindOfClass:[UIButton class]]) { UIButton *button = (UIButton *)subview; [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; } } } ``` It works fine in `iOS7`, but in `iOS8` the above code doesn't change the text color of items. Now my question is how to change the text color of items which I add in `UIActionSheet` using `iOS8`?? Additional Info: I added breakpoint to see whether following lines from the above code get executed or not: ``` UIButton *button = (UIButton *)subview; [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; ``` These lines do not get executed. So, `if([subview isKindOfClass:[UIButton class]])` is always `false` for all items of `actionSheet.subviews`. So what I think is that the view heirarchy of `UIActionSheet` has been changed.

Original source

Related problems