How do I change the UIAlertController's Title font using Swift?
I'm not talking about the message color, I'm not talking about the buttons color.
I'm talking about the Title.
How do I change the UIAlertController's Title font using Swift?
I'm not talking about the message color, I'm not talking about the buttons color.
I'm talking about the Title.
let attributedString = NSAttributedString(string: "Title", attributes: [
    NSFontAttributeName : UIFont.systemFontOfSize(15), //your font here
    NSForegroundColorAttributeName : UIColor.redColor()
])
let alert = UIAlertController(title: "", message: "",  preferredStyle: .alert)
alert.setValue(attributedString, forKey: "attributedTitle")
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (_) in
}
alert.addAction(cancelAction)
present(alert, animated: true, completion: nil)
Added the correct line of code to my answer as it's much more concise than the answer below.
Alert(self, Title: “Hello”, TitleColor: UIColor.whiteColor(), Message: “World”, MessageColor: UIColor.whiteColor(), BackgroundColor: UIColor.blackColor(), BorderColor: UIColor.yellowColor(), ButtonColor: UIColor.yellowColor())
    func Alert(View: ViewController, Title: String, TitleColor: UIColor, Message: String, MessageColor: UIColor, BackgroundColor: UIColor, BorderColor: UIColor, ButtonColor: UIColor) {
    let TitleString = NSAttributedString(string: Title, attributes: [NSFontAttributeName : UIFont.systemFontOfSize(15), NSForegroundColorAttributeName : TitleColor])
    let MessageString = NSAttributedString(string: Message, attributes: [NSFontAttributeName : UIFont.systemFontOfSize(15), NSForegroundColorAttributeName : MessageColor])
    let alertController = UIAlertController(title: Title, message: Message, preferredStyle: .Alert)
    alertController.setValue(TitleString, forKey: "attributedTitle")
    alertController.setValue(MessageString, forKey: "attributedMessage")
    let okAction = UIAlertAction(title: "OK", style: .Default) { (action) in
    }
    let cancelAction = UIAlertAction(title: "Cancel", style: .Default, handler: nil)
    alertController.addAction(okAction)
    alertController.addAction(cancelAction)
    let subview = alertController.view.subviews.first! as UIView
    let alertContentView = subview.subviews.first! as UIView
    alertContentView.backgroundColor = BackgroundColor
    alertContentView.layer.cornerRadius = 10
    alertContentView.alpha = 1
    alertContentView.layer.borderWidth = 1
    alertContentView.layer.borderColor = BorderColor.CGColor
    //alertContentView.tintColor = UIColor.whiteColor()
    alertController.view.tintColor = ButtonColor
    View.presentViewController(alertController, animated: true) {
        // ...
    }
}
What push25 said is correct, only you have to use key-value coding in order to set the attributed string. (Thanks dupuis2387)
    //Define a color
    let color = UIColor.redColor()
    //Make a controller
    let alertVC = UIAlertController(title: "Dont care what goes here, since we're about to change below", message: "", preferredStyle: UIAlertControllerStyle.Alert)
    //Title String
    var hogan = NSMutableAttributedString(string: "Presenting the great... Hulk Hogan!")
    //Make the attributes, like size and color
    hogan.addAttribute(NSFontAttributeName, value: UIFont.systemFontOfSize(40.0), range: NSMakeRange(24, 11))
    hogan.addAttribute(NSForegroundColorAttributeName, value: color, range: NSMakeRange(0, NSString(string: hogan.string).length))
    //Set the new title
    //Use "attributedMessage" for the message
    alertVC.setValue(hogan, forKey: "attributedTitle")
    //This will change the button color
    alertVC.view.tintColor = UIColor.orangeColor()
    //Make the button
    let button:UIAlertAction  = UIAlertAction(title: "Label text", style: UIAlertActionStyle.Default, handler: { (e:UIAlertAction!) -> Void in
        println("\(e)")
    })
    //You can add images to the button
    let accessoryImage:UIImage = UIImage(named: "someImage")!
    button.setValue(accessoryImage, forKey:"image")
    //Add the button to the alert
    alertVC.addAction(button)
    //Finally present it
    self.presentViewController(alertVC, animated: true, completion:  nil)
I construct this class:
class Alert {
class func showAlert(title: String, titleColor: UIColor, message: String, preferredStyle: UIAlertControllerStyle, titleAction: String, actionStyle: UIAlertActionStyle, vc: UIViewController) {
    let attributedString = NSAttributedString(string: title, attributes: [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 16), NSAttributedStringKey.foregroundColor: titleColor])
    let alert = UIAlertController(title: title, message: message, preferredStyle: preferredStyle)
    alert.setValue(attributedString, forKey: "attributedTitle")
    alert.addAction(UIAlertAction(title: titleAction, style: actionStyle, handler: nil))
    vc.present(alert, animated: true)
}
}
Usage
Alert.showAlert(title: "yourTitle", titleColor: .yourcolor, message: "your message", preferredStyle: .alert, titleAction: "your title action", actionStyle: .yourActionStyle, vc: self)
Hope this help :)
Here is for Swift 4 ++ also using a global instance for UIAlert
func showAlertError(withTitle title: String, withMessage message: String) {
    var dialogTitle = title
    if dialogTitle.isEmpty { dialogTitle = "Error:" }
    let attributedString = NSAttributedString(string: dialogTitle, attributes: [
        NSAttributedString.Key.font : UIFont.systemFont(ofSize: 15),
        NSAttributedString.Key.foregroundColor : UIColor.red
        ])
    let alert = UIAlertController(title: "", message: message, preferredStyle: .alert)
    alert.setValue(attributedString, forKey: "attributedTitle")
    let ok = UIAlertAction(title: "OK", style: .default, handler: nil)
    alert.addAction(ok)
    DispatchQueue.main.async(execute: {
        self.present(alert, animated: true)
    })
}
Also you can add a UIAlertAction with title "    "(space) and add a custom UILabel to UIAlertController.view at the place of title.