これが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)
キャンセルおよび呼び出しアクションのテキストの色を変更する方法がわかりません。タイトルテキストは現在黒で、キャンセルボタンと通話ボタンは白です。見やすくするために、すべて黒にするようにしています。何か案は?ありがとう!
何度か試行錯誤した結果、これが機能することがわかりました。うまくいけば、これが将来に役立つでしょうSwift初心者!
alertController.view.tintColor = UIColor.blackColor()
Swift 4.2
これを行う1つの方法は、UIAlertControllerで拡張を作成することです。これにより、すべてのアプリアラートが同じ色合いになります。しかし、それは破壊的な行動を赤い色のままにします。
extension UIAlertController{
open override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.view.tintColor = .yourcolor
}
}
以下のコードは、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)
ボタンの色を変更したい場合は、現在のView Controllerの後に次のコードを追加します。
alert.view.tintColor = UIColor.redColor()
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で実行する必要があったためです。
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 のとおり
私は同じ問題に直面し、iOS 9とiOS 10 +の色を変更するための最良の方法を見つけるために多くの時間を費やしました。
最後に、UIViewControllerの拡張を作成しました。拡張機能では、デフォルト機能「現在」にほぼ等しいカスタム機能を追加しましたが、色の修正を実行します。これが私の解決策です。 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!()
}
})
}
}
この固定関数を使用するには、デフォルトの現在の関数の代わりにこの関数を呼び出すだけです。例:
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!()
}
}
}
}
これが誰かを助け、多くの時間を節約することを願っています。私の時間はそのような詳細な答えによって救われなかったので:)
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://stackoverflow.com/a/37737212/1781087