2017-02-22 5 views
1

я получаю ошибку, описанную в при попытке изменить цвет на тексте внутри UIAlertController:приложение падает при попытке изменить цвет сообщения о UIAlertController, стремительные

Нагрузочного приложение из-за неперехваченное исключением «NSInvalidArgumentException», причина: '- [NSConcreteAttributedString rangeOfCharacterFromSet]: непризнанные селектор направлен например 0x60000003e320'

Функция, которая пытается изменить цвет:

@objc private func submitScore(color: Bool = false) { 
    var mess = "" 
    mess = color ? "Invalid username" : "" 
    let alertController = UIAlertController.init(title: "Submit score", message: mess, preferredStyle: .alert) 
    alertController.setValue(NSAttributedString(string: mess, attributes: [NSForegroundColorAttributeName: UIColor.red]), forKey: "message") 


    //Submit button calls function again 
    let submit = UIAlertAction(title: "Submit", style: .default) { (submit) in 
     self.submitScore(color: true) 
    } 
    let cancel = UIAlertAction(title: "Cancel", style: .cancel, handler: { (cancel) in 

    }) 
    alertController.addTextField(configurationHandler: {(textfield) in 
     textfield.placeholder = "Nickname" 
    }) 
    alertController.addAction(submit) 
    alertController.addAction(cancel) 

    present(alertController, animated: true, completion: {(alertController) in 
     print("shown") 
    }) 
} 

Проблема решается, если я удалить строки 5. NSForegroundColorAttributeName является действительным NSAttributedString-свойство, так что я не понимаю, ошибка ..

+0

Свойство 'message' имеет тип' String' так что вы не можете добавить атрибуты к нему. Для установки отправленного сообщения нет открытого свойства. – rckoenes

ответ

2

нет недвижимости доступна имя ключа в UIAlertController класса message, в этом месте использования attributedMessage для изменения сообщения.

в этом месте

let alertController = UIAlertController.init(title: "Submit score", message: mess, preferredStyle: .alert) 
    alertController.setValue(NSAttributedString(string: mess, attributes: [NSForegroundColorAttributeName: UIColor.red]), forKey: "message") 

использования

let alertController = UIAlertController.init(title: "Submit score", message: mess, preferredStyle: .alert) 
alertController.setValue(NSAttributedString(string: mess, attributes: [NSForegroundColorAttributeName: UIColor.red]), forKey: "attributedMessage") 

и если вы хотите изменить название UIAlertController, то вы должны использовать ключ 'attributedTitle'.

вы получите выход

enter image description here

+0

Спасибо, это сработало! :) –

0
@objc private func submitScore(color: Bool = false) { 
    var mess = "" 
    mess = color ? "Invalid username" : "" 
    let alertController = UIAlertController.init(title: "Submit score", message: mess, preferredStyle: .alert) 

    //Submit button calls function again 
    let submit = UIAlertAction(title: "Submit", style: .default) { (submit) in 
     self.submitScore(color: true) 
    } 
    let cancel = UIAlertAction(title: "Cancel", style: .cancel, handler: { (cancel) in 

    }) 
    alertController.addTextField(configurationHandler: {(textfield) in 
     textfield.placeholder = "Nickname" 
    }) 
    alertController.addAction(submit) 
    alertController.addAction(cancel) 

    present(alertController, animated: true, completion: {(alertController) in 
     print("shown") 
    }) 

    alertController.setValue(NSAttributedString(string: mess, attributes: [NSForegroundColorAttributeName: UIColor.red]), forKey: "message") 

} 
Смежные вопросы