9

Can I change colors of the UIAlertController ? A standard color is a blue color. And it's much close to the standard iOS apps. If it's customizable? How can I change colors of this? For example a button color.

Thanks!

Beginner
  • 136
  • 1
  • 1
  • 10
  • Has a working method come up yet? All below answers are affected by the same bug. –  Dec 23 '18 at 04:49

6 Answers6

28

You could just change the tintColor of the underlying view, however, due to a known bug introduced in iOS 9 (https://openradar.appspot.com/22209332), the tintColor is overridden by the application window's tintColor.

You can either:

  1. Change the app tintColor in the AppDelegate.

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
        self.window.tintColor = UIColor.redColor()
        return true
    }
    
  2. Reapply the color in the completion block.

    self.presentViewController(alert, animated: true, completion: {() -> Void in
        alert.view.tintColor = UIColor.redColor()
    })
    
Bill
  • 44,502
  • 24
  • 122
  • 213
guidev
  • 2,695
  • 2
  • 23
  • 44
13

In Swift, you could do something like this:

let alert = UIAlertController(title: "Alert", message: "This is an alert.", preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
alert.view.tintColor = UIColor.redColor()
self.presentViewController(alert, animated: true, completion: nil)
jacquelion
  • 149
  • 5
  • 1
    As @guidev said, there's a bug that prevents alert controllers from honoring the `tintColor` that you set on them. – NRitH Jun 10 '16 at 02:25
  • 3
    Looks like that bug has possibly been fixed. I just tested in Xcode 9.2 (9C40b) - iOS 11 and it seems to be working fine now. – Mark Moeykens Mar 04 '18 at 18:39
  • 2
    @MarkMoeykens I see the bug in iOS 12. –  Dec 23 '18 at 04:47
5

In Swift 4 and Xcode 9.2

let alertView = UIAlertController(title: "", message: "", preferredStyle: .alert)

alertView.addAction(UIAlertAction(title: "CONFIRM", style: .default, handler: { (alertAction) -> Void in
                //my logic
            }))

alertView.addAction(UIAlertAction(title: "CANCEL", style: .default, handler: nil))


alertView.view.tintColor = UIColor.init(red: 45.0/255.0, green: 187.0/255.0, blue: 135.0/255.0, alpha: 1.0)

present(alertView, animated: true, completion: nil)
Prashant Gaikwad
  • 3,493
  • 1
  • 24
  • 26
3

Just change the tintColor of the underlying view.

[alertController.view setTintColor:[UIColor yellowColor]];
Sonny Saluja
  • 7,193
  • 2
  • 25
  • 39
3

Add one line in your UIAllertController :

alert.view.tintColor = UIColor.black
Rohan Dave
  • 251
  • 1
  • 7
1

To change the tint color for all Alerts in Swift:

 extension UIAlertController{
    open override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
       self.view.tintColor = //color
    }
 }
JulianKro
  • 239
  • 3
  • 8