我正在实施自定义提醒,我为背景设置了一种颜色。当我在模拟器中挤压它时,下面的代码工作得很好,但是当我在iPhone上测试时,自定义背景被模式叠加,如下所示。
let alertController = UIAlertController(title: "Opções", message: "Deseja realmente excluir esse serviço?", preferredStyle: .Alert)
alertController.setValue(NSAttributedString(string: "Opções", attributes: [NSFontAttributeName : UIFont.systemFontOfSize(17),NSForegroundColorAttributeName : UIColor.whiteColor()]), forKey: "attributedTitle")
alertController.setValue(NSAttributedString(string: "Deseja realmente excluir esse serviço?", attributes: [NSFontAttributeName : UIFont.systemFontOfSize(17),NSForegroundColorAttributeName : UIColor.whiteColor()]), forKey: "attributedMessage")
alertController.view.tintColor = UIColor.whiteColor()
let backView = alertController.view.subviews.last?.subviews.last
backView?.layer.cornerRadius = 5.0
backView?.backgroundColor = corAzul
backView?.alpha = 1.0
let imageView = UIImageView(frame: CGRectMake(10, 15, 30, 30))
imageView.image = UIImage(named: "load")
alertController.view.addSubview(imageView)
let Action2 = UIAlertAction(title: "Excluir", style: .Default) { (action) in
Excluir()
}
let Action7 = UIAlertAction(title: "Cancelar", style: .Cancel) { (action) in
Cancelar()
}
alertController.addAction(Action2)
alertController.addAction(Action7)
viewController.presentViewController(alertController, animated: true) {}
这会导致什么?我该如何解决?
答案 0 :(得分:1)
如果要更改背景颜色,请尝试更改alertController.view.subviews.first?.subviews.first?.subviews.last?.backgroundColor
。但它仍然会有白色封面。 UIAlertViewController
的视图层次结构并不简单。您不知道它是影响封面颜色的图层还是视图。
您尝试更改UIAlertController
的背景颜色。但我认为这不是一个好主意。我们不知道UIAlertController
的iOS8和iOS9之间的区别。也许alertController.view.subviews.first?.subviews.first?.subviews.last?.backgroundColor
适用于iOS10,而不适用于以前的某些版本。您想要更改的内容的API不对我们开放,并且可能会随意更改。如果您想要自定义UIAlertViewController
,请尝试制作一个全新的。
答案 1 :(得分:0)
我找到了一个解决方案,我并不为此感到骄傲,因为它并不优雅且与众不同,但它确实有效! 显然,在10之前的iOS中子视图的数量导致1,当用“cont”检查时,然后.last或.fist都可以工作,但是在iOS 10中这个数字与1不同,我无法确定它是否会保持不变,但是我决定做一个“for”来做所有的可能性。
alertController.view.tintColor = UIColor.whiteColor()
for i in 0 ..< alertController.view.subviews.count {
alertController.view.subviews[i].backgroundColor = corAzul
alertController.view.subviews[i].layer.cornerRadius = 5.0
alertController.view.subviews[i].alpha = 1.0
for ii in 0 ..< alertController.view.subviews[i].subviews.count {
alertController.view.subviews[i].subviews[ii].backgroundColor = corAzul
alertController.view.subviews[i].subviews[ii].layer.cornerRadius = 5.0
alertController.view.subviews[i].subviews[ii].alpha = 1.0
for iii in 0 ..< alertController.view.subviews[i].subviews[ii].subviews.count {
alertController.view.subviews[i].subviews[ii].subviews[iii].backgroundColor = corAzul
alertController.view.subviews[i].subviews[ii].subviews[iii].layer.cornerRadius = 5.0
alertController.view.subviews[i].subviews[ii].subviews[iii].alpha = 1.0
}
}
}
我知道这不是很好,但它是唯一有效的解决方案! 如果有人发现更复杂的东西,请随时提供