2016-11-28 3 views
0

Я реализую пользовательское оповещение, где я устанавливаю цвет фона. Код ниже отлично работает, когда я сжимаю его в симуляторе, но когда я тестирую на iPhone, пользовательский фон накладывается шаблоном, как показано ниже.Swift UIAlertController background color

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

enter image description here

Что может привести к этому? И как я могу это решить?

ответ

0

Я нашел решение, я не слишком горжусь этим, потому что он не изящный и необычный, но он работает! По-видимому, количество подпунктов в iOS до 10 приводит к 1 при проверке с помощью «cont», тогда будет работать либо .last, либо .fist, но в iOS 10 этот номер отличается от 1, я не мог определить, будет ли он постоянным, Но я решил сделать «за», чтобы сделать все возможности.

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 

     } 
    } 

} 

Я знаю, что это некрасиво, но это было единственное решение, которое сработало! Если кто-то находит что-то более сложное, не стесняйтесь вносить свой вклад

+0

Лучше, на мой взгляд, не использовать UIAlertController вообще. Создание собственного оповещателя, представленного в виде представления, легко. – matt

+0

Я делал это для некоторых случаев, но у меня есть несколько приложений для предупреждений о действиях в моем проекте. И было бы сложно сделать что-то полностью настраиваемое и заменить в любом проекте. –

+0

Понял. Но настройка представления UIAlertController не поддерживается и (как вы видели) хрупкой. – matt

1

Если вы хотите изменить цвет фона, попробуйте изменить alertController.view.subviews.first?.subviews.first?.subviews.last?.backgroundColor. Но он все равно будет иметь белую обложку. Иерархия представления UIAlertViewController не так просто. Вы не знаете, является ли это слоем или видом, влияющим на цвет обложки. Вы пытаетесь изменить цвет фона UIAlertController. Но я не думаю, что это хорошая идея. Мы не знаем разницы между iOS8 и iOS9 UIAlertController. Возможно, alertController.view.subviews.first?.subviews.first?.subviews.last?.backgroundColor работает в iOS10 и не работает в некоторых предыдущих версиях. API того, что вы хотите изменить, не открыт для нас, и он может измениться по желанию. Если вы хотите иметь пользовательский номер UIAlertViewController, попробуйте сделать его совершенно новым.

+0

Как я могу создать новое предупреждение правильно? @ 季 亨达 –

+0

@AthilaZuma sry, я имею в виду использование 'UIViewController' для создания вашего настраиваемого контроллера просмотра предупреждений. –

+0

Не могли бы вы предоставить мне пример или ссылку для начала? @ 季 亨达 –