web-dev-qa-db-ja.com

UIAlertcontrollerの背景色を変更する

わかりましたので、このアラートを使用しています。背景は、灰色ではなく黒にしてください。タイトルとメッセージのテキストの色は変更できましたが、背景色は変更できませんでした。まあ欲しい色にしたいです。緑と青と白に変更しましたが、黒は変更しませんでした。黒に変更しようとすると、灰色になります。任意の提案が役立ち、感謝されます。私はこれをここで試しました IAlertControllerの背景色を変更する方法? そして、それが私が今いるところに到達した方法です。

これが私が今行っていることです:

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

これを試して

Swift2以下

let subview :UIView = alert.view.subviews. first! as UIView
let alertContentView = subview.subviews. first! as UIView
alertContentView.backgroundColor = UIColor.blackColor()

目的-C

UIView *subView = alertController.view.subviews.firstObject; //firstObject
UIView *alertContentView = subView.subviews.firstObject; //firstObject
[alertContentView setBackgroundColor:[UIColor darkGrayColor]];

alertContentView.layer.cornerRadius = 5;

更新された回答Swift 3以上

   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)

出力

iPhone

enter image description here

iPad

enter image description here

15
Anbu.Karthik

Swift 4.1:

これは私にとって最も良い方法です:

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

Objective Cの場合、以下のコードはチャームのように機能します。

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

既知のバグ( https://openradar.appspot.com/22209332 )のため、承認されたソリューションはiOS 9では機能しません。

ここで私の完全な答えを参照してください: https://stackoverflow.com/a/37737212/1781087

3
guidev

誰かが不透明な白い背景色を使いたい場合は、次のライナーでこれを行うことができます。

UIVisualEffectView.appearance(whenContainedInInstancesOf: [UIAlertController.classForCoder() as! UIAppearanceContainer.Type]).backgroundColor = UIColor.white

ただし、デフォルトの視覚効果のために他の色が異なって表示されるため、これは白色でのみ正しく機能することに注意してください。

0
Leszek Szary

let subview =(alert.view.subviews.first?.subviews.first?.subviews.first!)! UIViewとしてsubview.layer.cornerRadius = 1 subview.backgroundColor = UIColor.white

0
Dynamic Methods

スウィフト5
UIAlertController拡張機能を使用して、コードを1行だけ記述します。

alertController.setBackgroundColor(color: UIColor.black)

完全なドキュメント: http://www.swiftdevcenter.com/change-font-text-color-and-background-color-of-uialertcontroller/

0
Ashish Chauhan