尝试更改 UIAlertController 的消息颜色时应用程序崩溃,swift

app crashes when trying to change Message color of UIAlertController,swift

我在尝试更改 UIAlertController 中文本的颜色时收到如下所述的错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteAttributedString rangeOfCharacterFromSet:]: unrecognized selector sent to instance 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-属性 所以我不明白这个错误..

 @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")

}

您似乎试图将 NSAttributedString 设置为字符串变量 message。尝试

UIAlertControllerclass中没有属性可用的键名是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' 键。

你得到

的输出