在Swift中为UIAlertController设置背景颜色

6
我正在使用新的UIAlertController实现应用程序的选项菜单。我试图让UIAlertController的背景颜色与我的应用程序的主题相匹配。我的应用程序主题非常简单,包括白色文本和蓝/灰色背景颜色的工具栏和导航栏,如下所示: enter image description here 然而,我在尝试使我的UIAlertController符合这个主题时遇到了一些问题。我进行了以下两个调用来设置文本和背景颜色:
uiAlertController.view.backgroundColor = UIColor(red: CGFloat(.17255), green: CGFloat(.24314), blue: CGFloat(.31373), alpha: CGFloat(1.0))
uiAlertController.view.tintColor = UIColor.whiteColor()

这改变了UIAlertController的外观,如下所示:

enter image description here

文本颜色已从默认的蓝色系统颜色更改为白色,但背景颜色不正确。我还尝试修改指定的不透明度(uiAlertController.view.opaque = true),但这也没有帮助。我该如何设置背景颜色以使其与我的导航栏和工具栏相匹配?谢谢。
3个回答

9

适用于Swift 3和Xcode 8.2.1

let subview = (alert.view.subviews.first?.subviews.first?.subviews.first!)! as UIView

                subview.backgroundColor = UIColor(red: (145/255.0), green: (200/255.0), blue: (0/255.0), alpha: 1.0)

                alert.view.tintColor = UIColor.black

enter image description here


如何更改文本颜色? - Sazzad Hissain Khan
alert.view.tintColor = UIColor.black 如果需要其他内容,请告诉我,我会告诉您。 - Shakeel Ahmed
@ShakeelAhmed 怎样改变特定按钮的字体颜色? - Manikandan Selvanathan
@ShakeelAhmed 如何在操作表警告控制器中更改分隔符颜色。 - Manikandan Selvanathan
关于ActionSheet呢? - Yaroslav Dukal
好的,这对我来说在Xcode 10,iOS 12上起作用。但是alert.view.subviews.first?.subviews.first?.subviews.first!确切的意思是什么呢? - Zhou Haibo

3

在Swift中设置UIAlertController的背景颜色

您只需要执行以下操作:

//创建您的警报控制器

...

//设置背景颜色

let backView = yourAlertController.view.subviews.last?.subviews.last
backView?.layer.cornerRadius = 10.0
backView?.backgroundColor = UIColor.yellowColor() 

self.presentViewController(yourAlertController, animated: true, completion: nil);

1
我曾遇到过同样的问题。事实证明,我需要像这样遍历子视图树:
var subView = alertController.view.subviews.first as! UIView
var contentView = subView.subviews.first as! UIView
contentView.backgroundColor = UIColor(red: 233.0/255.0, green: 133.0/255.0, blue: 49.0/255.0, alpha: 1.0)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接