Ok donc j'ai cette alerte que j'utilise et je veux que le fond soit noir et non gris comme ça. J'ai réussi à changer la couleur du texte pour le titre et le message mais pas la couleur d'arrière-plan. Eh bien à la couleur désirée que je veux. Je l'ai changé en vert bleu et blanc, mais pas en noir. Lorsque j'essaye de le changer en noir, il devient gris. Toutes les suggestions aideront et seront appréciées. J'ai essayé ceci ici Comment changer la couleur d'arrière-plan du UIAlertController? et c'est ainsi que je suis arrivé là où je suis maintenant.
Voici ce que je vais maintenant:
func showAlert(title:String, message:String) {
//Set up for the title color
let attributedString = NSAttributedString(string: title, attributes: [
NSFontAttributeName : UIFont.systemFontOfSize(15), //your font here,
NSForegroundColorAttributeName : UIColor.whiteColor()
])
//Set up for the Message Color
let attributedString2 = NSAttributedString(string: message, attributes: [
NSFontAttributeName : UIFont.systemFontOfSize(15), //your font here,
NSForegroundColorAttributeName : UIColor.whiteColor()
])
let alert = UIAlertController(title: title,message: message, preferredStyle: .Alert)
alert.setValue(attributedString, forKey: "attributedTitle")
alert.setValue(attributedString2, forKey: "attributedMessage")
//alert.view.tintColor = UIColor.whiteColor()
let dismissAction = UIAlertAction(title: "Dismiss", style: .Destructive, handler: nil)
alert.addAction(dismissAction)
self.presentViewController(alert, animated: true, completion: nil)
//set the color of the Alert
let subview = alert.view.subviews.first! as UIView
let alertContentView = subview.subviews.first! as UIView
alertContentView.backgroundColor = UIColor.blackColor()
//alertContentView.backgroundColor = UIColor.greenColor()
//Changes is to a grey color :(
/*
alertContentView.backgroundColor = UIColor(
red: 0,
green: 0,
blue: 0,
alpha: 1.0)
//Also another Grey Color Not batman black
*/
//alertContentView.backgroundColor = UIColor.blueColor()
//turns into a purple
}
essaye ça
Swift2 et inférieur
let subview :UIView = alert.view.subviews. first! as UIView
let alertContentView = subview.subviews. first! as UIView
alertContentView.backgroundColor = UIColor.blackColor()
Objectif -C
UIView *subView = alertController.view.subviews.firstObject; //firstObject
UIView *alertContentView = subView.subviews.firstObject; //firstObject
[alertContentView setBackgroundColor:[UIColor darkGrayColor]];
alertContentView.layer.cornerRadius = 5;
réponse mise à jour Swift 3 et plus
let alert = UIAlertController(title: "validate",message: "Check the process", preferredStyle: .alert)
let dismissAction = UIAlertAction(title: "Dismiss", style: .destructive, handler: nil)
alert.addAction(dismissAction)
self.present(alert, animated: true, completion: nil)
// change the background color
let subview = (alert.view.subviews.first?.subviews.first?.subviews.first!)! as UIView
subview.layer.cornerRadius = 1
subview.backgroundColor = UIColor(red: (195/255.0), green: (68/255.0), blue: (122/255.0), alpha: 1.0)
sortie
iPhone
iPad
Swift 4.1:
C'est la meilleure façon de travailler pour moi:
func testAlert(){
let alert = UIAlertController(title: "Let's See ..",message: "It Works!", preferredStyle: .alert)
let dismissAction = UIAlertAction(title: "Dismiss", style: .default, handler: nil)
// Accessing alert view backgroundColor :
alert.view.subviews.first?.subviews.first?.subviews.first?.backgroundColor = UIColor.green
// Accessing buttons tintcolor :
alert.view.tintColor = UIColor.white
alert.addAction(dismissAction)
present(alert, animated: true, completion: nil)
}
Pour l'objectif C, le code ci-dessous fonctionne comme un charme.
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Save changes?" message:nil preferredStyle:UIAlertControllerStyleAlert];
UIView *firstSubview = alertController.view.subviews.firstObject;
UIView *alertContentView = firstSubview.subviews.firstObject;
for (UIView *subSubView in alertContentView.subviews) { //This is main catch
subSubView.backgroundColor = [UIColor blueColor]; //Here you change background
}
En raison d'un bogue connu ( https://openradar.appspot.com/22209332 ), la solution acceptée ne fonctionne pas sur iOS 9.
Voir ma réponse complète ici: https://stackoverflow.com/a/37737212/1781087
Dans le cas où quelqu'un souhaite avoir une couleur de fond blanc opaque, il peut le faire avec cette doublure:
UIVisualEffectView.appearance(whenContainedInInstancesOf: [UIAlertController.classForCoder() as! UIAppearanceContainer.Type]).backgroundColor = UIColor.white
Notez cependant que cela ne fonctionnera correctement qu'avec la couleur blanche car les autres couleurs apparaîtront différemment en raison de l'effet visuel par défaut.
laissez subview = (alert.view.subviews.first? .subviews.first? .subviews.first!)! comme UIView subview.layer.cornerRadius = 1 subview.backgroundColor = UIColor.white
Swift 5
Écrivez une seule ligne de code à l'aide de l'extension UIAlertController.
alertController.setBackgroundColor(color: UIColor.black)
Documentation complète: http://www.swiftdevcenter.com/change-font-text-color-and-background-color-of-uialertcontroller/