Change font type and size of UIActionSheet title string

font-size, ios, iphone, uiactionsheet

Solution

I assume you have a class which implements the `UIActionSheetDelegate` protocol and your class is a delegate class of the current `UIActionSheet`, so in that class you can change the whole title of the `UIActionSheet` like

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet {
    for (UIView *_currentView in actionSheet.subviews) {
        if ([_currentView isKindOfClass:[UILabel class]]) {
            [((UILabel *)_currentView) setFont:[UIFont boldSystemFontOfSize:15.f]];
        }
    }
}

but as far as you see you have no chance to format the part of the `UILabel` object's `text` property.

you could add a new `UILabel` for your `actionsheet` now with a different font, if you want to see a text with the bolded `DO:` string... but from here the limit is you imagination only, you can format the `UIActionSheet`'s elements in this method or inside the `-didPresentActionSheet:` method as well.

so this would be the idea for this.

UPDATE on 7 Oct 2013

in iOS7 we don't really have direct access to the subviews of an `UIAlertView` or an `UIActionSheet` object, so this solution might not be working properly on iOS7 environment.

if you have any issue with it on iOS7, please comment it to me! thank you.

UPDATE on 22 Jun 2014

I have not found any solution to do such thing directly with the new `UIAlertController` in iOS8, the title label looks to be not visible in the entire view-hierarchy of the `UIAlertController`, neither visible before it appears or even after.

NOTE: I've also figured out that it is not forbidden to overlap/cover its content, after it appeared on the screen. currently it is impossible to predict that it will work over Beta or whether or not it is AppStore-safe.

NOTE: please bear in your mind the view-lifecycle's schedule, and do not try to present any content in a view or view controler if that is not in the navigation stack already.

anyway, here is a Swift solution how I could reach the layers and I could add my custom view to it.

let alertController: UIAlertController = UIAlertController(title: "", message: "", preferredStyle: UIAlertControllerStyle.Alert)
self.presentViewController(alertController, animated: true, completion: {
    let aboveBlurLayer: UIView = alertController.view.subviews[0] as UIView
    let belowBlurLayer: UIView = (aboveBlurLayer.subviews[0].subviews as Array<AnyObject>)[0] as UIView
    let customView: UIView = UIView(frame: aboveBlurLayer.bounds)
    customView.backgroundColor = UIColor.redColor()
    aboveBlurLayer.addSubview(customView)
    })

NOTE: it might be useful to add custom content to an alert/actionsheet, but if it does not work in the future, I will update my answer.

Problem

I have a UIActionSheet with title string "DO: These tasks". In the title string, the substring "DO:" should be Bold(with a particular font size) and the substring "These tasks" should be Regular. Is it possible? How can I do this?

Original source