次のコードを使用して、アイテムテキストが赤のUIAlertControllerアクションシートを表示します。色を設定するために、tintプロパティを使用しました。
UIAlertController *alertController = [UIAlertController
alertControllerWithTitle:nil
message:nil
preferredStyle:UIAlertControllerStyleActionSheet];
alertController.view.tintColor = [UIColor redColor];
テキストの色は、ハイライトまたは選択時にデフォルトで青になっているようです。これは正常ですか、これをどのように停止しますか?
これは既知のバグです。 https://openradar.appspot.com/22209332 を参照してください
修正するには、完了ハンドラーで色合いを再適用します。ここに私のSwiftソリューションがあります。ObjCに簡単に適合させることができます。
_alertController.view.tintColor = UIColor.redColor() // apply 1st time to prevent flicker from Blue to Red when displaying
navigationController?.presentViewController(alertController, animated: true, completion: {
// Bugfix: iOS9 - Tint not fully Applied without Reapplying
alertController.view.tintColor = UIColor.redColor()
})
_
注:これでバグが完全に修正されるわけではありません。デバイスが回転すると、ボタンがシステムデフォルト(=青)の色合いに変更されます。
IOS 9.1で修正される予定です。
編集10/23/2015:iOS 9.1ではまだ修正されていません。数日前にリリースされたiOS 9.1 + Xcode 7.1(7B91B)で再テストされました。現在、.tintColorの設定は機能しませんが、コメントされているように、アプリケーション全体のtintColorを設定できます。 AppDelegate didFinishLaunchingWithOptionsでwindow?.tintColor = UIColor.redColor()
を設定します。 これはAlertController Buttonsにも色合いを付けますが、この色合いはアプリケーション全体に適用されるため、場合によっては適切ではありません。
PresentViewControllerの後にtintColorを追加するだけです。 iOS 9.0.2で動作します
[self presentViewController:alertController animated:YES completion:nil];
[alertController.view setTintColor:[UIColor yellowColor]];
Appdelegateでアプリの色合いを変更することもできます。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window.tintcolor = [UIColor yellowColor];
return YES;
}
私にぴったりです。
Swift 4、Xcode 9の更新
private static func setupAppearanceForAlertController() {
let view = UIView.appearance(whenContainedInInstancesOf: [UIAlertController.self])
view.tintColor = .black
}
このようにボタンの色を変更できます
UIAlertAction* button = [UIAlertAction
actionWithTitle:@"Delete Profile"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
//Add Action.
}];
[button setValue:[UIColor redColor] forKey:@"titleTextColor"];
この行を使用して[button setValue:[UIColor redColor] forKey:@ "titleTextColor"];アクションシートのボタンの色を変更できます
traitCollectionDidChange
のサブクラスのUIAlertController
に色合いを設定します。
override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
self.view.tintColor = UIColor.redColor()
}
ビューのtintAdjustmentModeをUIViewTintAdjustmentModeNormalに変更するだけで、淡色表示の色は変更されません。
カスタムcolorおよびfontを設定するには、サブクラスUIAlertController
を次のようにします。
import UIKit
class StyledAlertController: UIAlertController {
private var cancelText:String?
override func viewDidLoad() {
super.viewDidLoad()
view.tintColor = YourColor
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
findLabel(view)
}
private func findLabel(scanView: UIView!) {
if (scanView.subviews.count > 0) {
for subview in scanView.subviews {
if let label:UILabel = subview as? UILabel {
if (cancelText != nil && label.text == cancelText!) {
dispatch_async(dispatch_get_main_queue(),{
label.textColor = YourColor
label.tintColor = YourColor
})
}
let font:UIFont = UIFont(name: YourFont, size: label.font!.pointSize)!
label.font = font
}
findLabel(subview)
}
}
}
}
このように使用します(通常どおり)
let StyledAlertController = StyledAlertController(title: "My Title", message: "My Message", preferredStyle: .ActionSheet)
let cancelAction:UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel) { action -> Void in
print("Cancel Action Click")
}
actionSheetController.addAction(cancelAction)
let anotherAction:UIAlertAction = UIAlertAction(title: "Another Action", style: .Default) { action -> Void in
print("Another Action Click")
}
actionSheetController.addAction(anotherAction:UIAlertAction)
presentViewController(actionSheetController, animated: true, completion: nil)
私はまだあなたが達成したいことを混乱しています。しかし、Destructive
ボタンを作成するAppleの方法を試すことができます(デフォルトではテキストの色は赤です)。
UIAlertAction
sを作成しているコードでは、赤色のボタンにDefault
スタイルを使用しません。代わりにUIAlertActionStyleDestructive
を使用してください。サンプルコード:
UIAlertAction* cancel = [UIAlertAction
actionWithTitle:@"Cancel"
style:UIAlertActionStyleDestructive
handler:^(UIAlertAction * action)
{
[view dismissViewControllerAnimated:YES completion:nil];
}];
新しいティントカラーの高速「ポップアップ」を防ぐために、アラートコントローラーのアルファ値をアニメーション化できます。バグがない場合とまったく同じに見えます:
alertController.view.alpha = 0.0
presentViewController(alertController, animated: false) {
alertController.view.tintColor = UIColor.redColor()
UIView.animateWithDuration(0.2, animations: { alertController.view.alpha = 1.0 }, completion: nil)
}
UIAlertControllerはiOS 8以降のavailabelです。したがって、古いバージョンのデバイスにはバグがあります。対応するバージョン以上のデバイスには問題はありません。