我使用以下代码来呈现UIAlertController操作表,其中项目文本为红色。我已经使用了色调属性来设置颜色。
UIAlertController *alertController = [UIAlertController
alertControllerWithTitle:nil
message:nil
preferredStyle:UIAlertControllerStyleActionSheet];
alertController.view.tintColor = [UIColor redColor];
文本颜色似乎在突出显示或选择时默认为蓝色。这是正常的,我该如何阻止它?
答案 0 :(得分:48)
这是一个已知的Bug,请参阅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()
})
一个注意:这不完全修复Bug。您将在设备旋转时注意到按钮按系统默认(=蓝色)色调重新着色。
预计它将通过iOS 9.1修复。
2015年10月23日编辑:iOS 9.1仍未修复。几天前发布的iOS 9.1 + Xcode 7.1(7B91B)重新测试。截至目前设置.tintColor不起作用,但是如您所述,您可以设置整个应用程序的tintColor,例如在AppDelegate中,didFinishLaunchingWithOptions设置为window?.tintColor = UIColor.redColor()
。 这也会使AlertController Buttons 着色,但在某些情况下可能不适合,因为此色调适用于整个应用程序。
答案 1 :(得分:38)
只需在presentViewController之后添加tintColor即可。适用于iOS 9.0.2
[self presentViewController:alertController animated:YES completion:nil];
[alertController.view setTintColor:[UIColor yellowColor]];
答案 2 :(得分:13)
您还可以在appdelegate中更改应用色调颜色。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window.tintcolor = [UIColor yellowColor];
return YES;
}
非常适合我。
答案 3 :(得分:6)
更新Swift 4,Xcode 9
private static func setupAppearanceForAlertController() {
let view = UIView.appearance(whenContainedInInstancesOf: [UIAlertController.self])
view.tintColor = .black
}
答案 4 :(得分:5)
您可以像这样更改按钮颜色
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"]; 您可以更改操作表的按钮颜色
答案 5 :(得分:1)
在traitCollectionDidChange
的子类UIAlertController
中设置您的色调颜色。
override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
self.view.tintColor = UIColor.redColor()
}
答案 6 :(得分:1)
要像这样设置自定义颜色和字体子类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)
像这样(像往常一样)使用
var data = new FormData()
var file = document.getElementById('my-file-element').files[0]
data.set('key', file)
// Send ajax as normal with formdata body.
答案 7 :(得分:1)
只需将您的视图tintAdjustmentMode更改为UIViewTintAdjustmentModeNormal,这样就不会在dimm上更改它的颜色。
答案 8 :(得分:0)
我仍然对你想要达到的目标感到困惑。但您可以尝试Apple创建Destructive
按钮的方式(默认情况下文本颜色为红色)。
您要创建UIAlertAction
的代码不要将Default
样式用于您想要的红色按钮。而是使用UIAlertActionStyleDestructive
。示例代码:
UIAlertAction* cancel = [UIAlertAction
actionWithTitle:@"Cancel"
style:UIAlertActionStyleDestructive
handler:^(UIAlertAction * action)
{
[view dismissViewControllerAnimated:YES completion:nil];
}];
答案 9 :(得分:0)
UIAlertController可用于iOS 8及更高版本,因此旧版本的设备存在错误。具有相应或更高版本的设备没有问题。
答案 10 :(得分:0)
为了防止新色调颜色的快速“弹出”,可以动画警报控制器的alpha值。然后它看起来完全一样,如果没有错误:
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)
}