UIAlertController 更改字体颜色
Posted
技术标签:
【中文标题】UIAlertController 更改字体颜色【英文标题】:UIAlertController change font color 【发布时间】:2015-01-12 05:34:12 【问题描述】:这是我创建 UIAlertController 的代码
// Create the alert controller
var alertController = UIAlertController(title: "Are you sure you want to call \(self.number)?", message: "", preferredStyle: .Alert)
// Create the actions
var okAction = UIAlertAction(title: "Call", style: UIAlertActionStyle.Default)
UIAlertAction in
var url:NSURL = NSURL(string: "tel://\(self.number)")!
UIApplication.sharedApplication().openURL(url)
var cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel)
UIAlertAction in
// Add the actions
alertController.addAction(okAction)
alertController.addAction(cancelAction)
// Present the controller
self.presentViewController(alertController, animated: true, completion: nil)
我不知道如何更改取消和呼叫操作的文本颜色。标题文本当前为黑色,取消和呼叫按钮为白色。我正在使它们全部变黑以获得更好的可见度。有任何想法吗?谢谢!
【问题讨论】:
【参考方案1】:经过反复试验,我发现这行得通。希望这将有助于未来的 swift 新人!
alertController.view.tintColor = UIColor.blackColor()
【讨论】:
这在警报第一次出现时对我有用。但是在单击按钮后,它们又变回了默认颜色。根据我在其他地方读到的内容,我认为这个问题在 ios 9 中可能是新问题。 因为这在 iOS 9 中不起作用,这里是设置UIAlertController
按钮的 tintColor
的解决方法:***.com/a/32636878/4376309【参考方案2】:
Piyush 的回答对我帮助最大,但这里有一些针对 Swift 3 的调整以及分别更改标题和消息。
标题:
alert.setValue(NSAttributedString(string: alert.message, attributes: [NSFontAttributeName : UIFont.systemFont(ofSize: 29, weight: UIFontWeightMedium), NSForegroundColorAttributeName : UIColor.red]), forKey: "attributedTitle")
消息:
alert.setValue(NSAttributedString(string: alert.message, attributes: [NSFontAttributeName : UIFont.systemFont(ofSize: 29, weight: UIFontWeightMedium), NSForegroundColorAttributeName : UIColor.red]), forKey: "attributedMessage")
大字体是因为我实际上需要为 tvOS 做它,在它和 iOS 上效果很好。
【讨论】:
对于 Title 必须有: alert.setValue(NSAttributedString(string: alert.title, attributes: [NSFontAttributeName : UIFont.systemFont(ofSize: 29, weight: UIFontWeightMedium), NSForegroundColorAttributeName : UIColor.red] ), forKey: "attributedTitle")【参考方案3】:斯威夫特 4.2
这样做的一种方法是在 UIAlertController 上进行扩展,这样您的所有应用警报都将具有相同的色调。但它会将破坏性行为显示为红色。
extension UIAlertController
open override func viewDidLayoutSubviews()
super.viewDidLayoutSubviews()
self.view.tintColor = .yourcolor
【讨论】:
【参考方案4】:以下代码正在更改UIAlertView
标题颜色。
let alert = UIAlertController(title: messageTitle, message: messageText, preferredStyle: UIAlertControllerStyle.Alert)
alert.setValue(NSAttributedString(string: messageTitle, attributes: [NSFontAttributeName : UIFont.systemFontOfSize(17),NSForegroundColorAttributeName : UIColor.redColor()]), forKey: "attributedTitle")
alert.addAction(UIAlertAction(title: buttonText, style: UIAlertActionStyle.Default, handler: nil))
parent.presentViewController(alert, animated: true, completion: nil)
如果要更改按钮颜色,请在当前视图控制器之后添加以下代码。
alert.view.tintColor = UIColor.redColor()
【讨论】:
【参考方案5】:以下是 Swift 4 的更新,以 Cody 的回答为基础:
为警报标题设置颜色:
alert.setValue(NSAttributedString(string: alert.title!, attributes: [NSAttributedStringKey.font : UIFont.systemFont(ofSize: 17, weight: UIFont.Weight.medium), NSAttributedStringKey.foregroundColor : UIColor.blue]), forKey: "attributedTitle")
为警报消息设置颜色:
alert.setValue(NSAttributedString(string: alert.message, attributes: [NSAttributedStringKey.font : UIFont.systemFont(ofSize: 17, weight: UIFont.Weight.Medium), NSAttributedStringKey.foregroundColor : UIColor.green]), forKey: "attributedMessage")
根据https://developer.apple.com/documentation/foundation/nsattributedstring/key
【讨论】:
只有一次编辑;您在颜色示例中缺少.font
。【参考方案6】:
在 Swift 5 和 XCode 11.1 及更高版本中,警报标题的颜色:
alert.setValue(NSAttributedString(string: alert.title!, attributes: [NSAttributedString.Key.font : UIFont.systemFont(ofSize: 25, weight: UIFont.Weight.medium), NSAttributedString.Key.foregroundColor : UIColor.red]), forKey: "attributedTitle")
警报消息的颜色:
alert.setValue(NSAttributedString(string: alert.message!, attributes: [NSAttributedString.Key.font : UIFont.systemFont(ofSize: 20,weight: UIFont.Weight.medium),NSAttributedString.Key.foregroundColor :UIColor.black]), forKey: "attributedMessage")
【讨论】:
【参考方案7】:我遇到了同样的问题,并花了很多时间试图找到为 iOS 9 和 iOS 10 + 更改颜色的最佳方法,因为它以不同的方式实现。
最后我为 UIViewController 做了一个扩展。在扩展中,我添加了几乎等于默认功能“present”的自定义功能,但执行颜色修复。这是我的解决方案。适用于swift 3+,适用于目标从iOS 9开始的项目:
extension UIViewController
/// Function for presenting AlertViewController with fixed colors for iOS 9
func presentAlert(alert: UIAlertController, animated flag: Bool, completion: (() -> Swift.Void)? = nil)
// Temporary change global colors
UIView.appearance().tintColor = UIColor.red // Set here whatever color you want for text
UIApplication.shared.keyWindow?.tintColor = UIColor.red // Set here whatever color you want for text
//Present the controller
self.present(alert, animated: flag, completion:
// Rollback change global colors
UIView.appearance().tintColor = UIColor.black // Set here your default color for your application.
UIApplication.shared.keyWindow?.tintColor = UIColor.black // Set here your default color for your application.
if completion != nil
completion!()
)
要使用这个固定函数,你应该只调用这个函数而不是默认的 present 函数。示例:
self.presentAlert(alert: alert, animated: true)
相同的解决方案,但针对 UIActivityViewController:
extension UIViewController
/// Function for presenting UIActivityViewController with fixed colors for iOS 9 and 10+
func presentActivityVC(vc: UIActivityViewController, animated flag: Bool, completion: (() -> Swift.Void)? = nil)
// Temporary change global colors for changing "Cancel" button color for iOS 9 and 10+
if UIDevice.current.systemVersion.range(of: "9.") != nil
UIApplication.shared.keyWindow?.tintColor = ColorThemes.alertViewButtonTextColor
else
UILabel.appearance().textColor = ColorThemes.alertViewButtonTextColor
self.present(vc, animated: flag)
// Rollback for changing global colors for changing "Cancel" button color for iOS 9 and 10+
if UIDevice.current.systemVersion.range(of: "9.") != nil
UIApplication.shared.keyWindow?.tintColor = ColorThemes.tintColor
else
UILabel.appearance().textColor = ColorThemes.textColorNormal
if completion != nil
completion!()
我希望这对某人有所帮助并节省大量时间。因为这么详细的答案并没有节省我的时间:)
【讨论】:
【参考方案8】:试试这个
alert.setValue(NSAttributedString(string: alert.message, attributes: [NSFontAttributeName : UIFont.systemFont(ofSize: 29, weight: UIFontWeightMedium), NSForegroundColorAttributeName : UIColor.red]), forKey: "attributedTitle")
【讨论】:
【参考方案9】:在 iOS 9.0 之前,您可以像这样简单地更改底层视图的 tintColor
:
alertController.view.tintColor = UIColor.redColor()
但是,由于 iOS 9 中引入了一个错误,您可以:
在 AppDelegate 中更改应用 tintColor。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool
self.window.tintColor = UIColor.redColor()
return true
在完成块中重新应用颜色。
self.presentViewController(alert, animated: true, completion: () -> Void in
alert.tintColor = UIColor.redColor()
)
在这里查看我的其他答案:https://***.com/a/37737212/1781087
【讨论】:
以上是关于UIAlertController 更改字体颜色的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UIAlertController 中更改 UIAlertAction 的字体大小和颜色
ios ~ UIAlertcontroller 设置字体颜色
[iOS]改变UIAlertController的标题内容的字体和颜色