web-dev-qa-db-fra.com

changer la couleur d'arrière-plan de UIAlertcontroller

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



}
13
MNM

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

enter image description here

iPad

enter image description here

15
Anbu.Karthik

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

Test Image

17
cs4alhaider

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
}
5
R. Mohan

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

3
guidev

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.

0
Leszek Szary

laissez subview = (alert.view.subviews.first? .subviews.first? .subviews.first!)! comme UIView subview.layer.cornerRadius = 1 subview.backgroundColor = UIColor.white

0
Dynamic Methods

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/

0
Ashish Chauhan