我一直在使用以下代码来更改我在UIActionSheet
中添加的项目的文字颜色。:
- (void)willPresentActionSheet:(UIActionSheet *)actionSheet {
for (UIView *subview in actionSheet.subviews) {
if ([subview isKindOfClass:[UIButton class]]) {
UIButton *button = (UIButton *)subview;
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
}
}
}
它在iOS7
中工作正常,但在iOS8
中,上述代码不会更改项目的文字颜色。
现在我的问题是如何使用UIActionSheet
更改我在iOS8
中添加的项目的文本颜色?
其他信息:
我添加断点以查看上面代码中的以下行是否被执行:
UIButton *button = (UIButton *)subview;
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
这些行不会被执行。因此,对于if([subview isKindOfClass:[UIButton class]])
的所有项,false
始终为actionSheet.subviews
。所以我认为是观点层面的观点
UIActionSheet
已被更改。
答案 0 :(得分:36)
如果您仍想使用UIActionSheet
代替UIAlertController
以支持较旧的iOS版本,则可以轻松实现。
UIActionSheet
实际上在iOS 8中使用UIAlertController
,并且它有一个私有属性_alertController
。
SEL selector = NSSelectorFromString(@"_alertController");
if ([actionSheet respondsToSelector:selector])
{
UIAlertController *alertController = [actionSheet valueForKey:@"_alertController"];
if ([alertController isKindOfClass:[UIAlertController class]])
{
alertController.view.tintColor = [UIColor blueColor];
}
}
else
{
// use other methods for iOS 7 or older.
}
对于Swift,下面的代码应该可行
let alertAction = UIAlertAction(title: "XXX", style: .default) { (action) in
}
alertAction.setValue(UIColor.red, forKey: "titleTextColor")
答案 1 :(得分:31)
要更改按钮标题颜色,您需要使用UIAlertController
并设置主tintColor
的{{1}}。
将按钮标题颜色设置为黑色的示例:
view
答案 2 :(得分:10)
好的,我遇到了同样的问题,但我想我找到了一个解决方案:
适当的方式应该是这样的,我猜它适用于iOS7:
[[UIButton appearanceWhenContainedIn:[UIActionSheet class], nil] setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
但是由于ActionSheets"按钮"它在iOS8中不起作用。现在基于UICollectionView。 因此,经过一些挖掘,我得到了这个工作:
[[UICollectionView appearanceWhenContainedIn:[UIAlertController class], nil] setTintColor:[UIColor blueColor]];
答案 3 :(得分:9)
我正在使用它。
[[UIView appearanceWhenContainedIn:[UIAlertController class], nil] setTintColor:[UIColor blueColor]];
添加一行(AppDelegate)并适用于所有UIAlertController。
答案 4 :(得分:6)
我有同样的任务,我今天做了这个黑客,很脏,但它有效
class CustomAlertViewController: UIAlertController {
internal var cancelText: String?
private var font: UIFont? = UIFont(name: "MuseoSansCyrl-500", size: 12)
override func viewDidLoad() {
super.viewDidLoad()
self.view.tintColor = UIColor.blackColor()
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
self.findLabel(self.view) //if you need ios 9 only, this can be made in viewWillAppear
}
func findLabel(scanView: UIView!) {
if (scanView.subviews.count > 0) {
for subview in scanView.subviews {
if let label: UILabel = subview as? UILabel {
if (self.cancelText != nil && label.text == self.cancelText!) {
dispatch_async(dispatch_get_main_queue(),{
label.textColor = UIColor.redColor() //for ios 8.x
label.tintColor = UIColor.redColor() //for ios 9.x
})
}
if (self.font != nil) {
label.font = self.font
}
}
self.findLabel(subview)
}
}
}
}
答案 5 :(得分:3)
更改tintColor
window
为我工作。
在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions method
写下这个:
[self.window setTintColor:[UIColor redColor]];
这改变了所有UIActionSheet
个对象的字体颜色。
答案 6 :(得分:3)
对于iOS 7向后兼容性,并收集正确的默认色调颜色(Apple可能会在将来的版本中更改),我使用它。感谢上面关于default tint和Lucas's answer的答案。
const Class alertControllerClass = NSClassFromString(@"UIAlertController");
if(alertControllerClass)
{
UIColor *defaultTintColour = UIView.new.tintColor;
[[UIView appearanceWhenContainedIn: alertControllerClass, nil] setTintColor: defaultTintColour];
}
小心但是 - 您需要确保在开始设置全局色调之前使用此,否则UIView.new.tintColor
将只提供您已设置的当前色调。
答案 7 :(得分:0)
快捷键4
let alert = UIAlertController(title: "title", message: "message", preferredStyle: .alert)
alert.view.tintColor = UIColor.black
self.present(alert, animated: true, completion: nil)
答案 8 :(得分:0)
对于Swift,您可以这样做
let alertAction = UIAlertAction(title: "XXX", style: .default) { (action) in
}
alertAction.setValue(UIColor.red, forKey: "titleTextColor")