UIBarButtonItem 标题文本始终是全局色调颜色

Posted

技术标签:

【中文标题】UIBarButtonItem 标题文本始终是全局色调颜色【英文标题】:UIBarButtonItem Title Text is Always Global Tint Color 【发布时间】:2014-05-22 23:38:56 【问题描述】:

ios 7.0 及更高版本。

在 AppDelegate.m 中,我正在设置我的全局 tintColor:self.window.tintColor = myGlobalTintColor;

在我的表格视图控制器中,在编辑表格视图单元格时,我想要导航栏中的红色垃圾桶按钮,我有这个:

- (void)setEditing:(BOOL)editing animated:(BOOL)animate 
    [super setEditing:editing animated:animate];
    if (editing)  // Start editing
        self.deleteBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:self action:@selector(deleteButtonPressed)];
        [self.deleteBarButtonItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIColor redColor],  NSForegroundColorAttributeName, nil] forState:UIControlStateNormal];
        self.navigationItem.rightBarButtonItems = @[self.deleteBarButtonItem];
    

尽管将NSForegroundColorAttributeName 设置为[UIColor redColor], 的代码行我从未看到红色。当按钮设置为.enabled = YES 时,我只是在我的全局色调中看到它,就像所有其他按钮一样:

我已经梳理了我的代码,并且我确定没有其他位置可以将其他任何内容设置为 myGlobalTintColor。值得注意的是,这个UITableViewController 是从情节提要中实例化的。注释掉 AppDelegate.m 中的行只会将所有内容发送回默认的蓝色 tintColor,但我仍然没有在删除按钮上看到红色。

【问题讨论】:

您是否尝试过设置色调颜色而不是标题文本属性? 你试过[self.deleteBarButtonItem setTintColor:[UIColor redColor]];而不是setTitleTextAttributes:吗? 我刚试过。很不幸的是,不行。设置self.deleteBarButtonItem.tintColor 什么也没做。 【参考方案1】:

原来问题是我使用了第三方库SDCAlertView,而我正在设置

[[SDCAlertView appearance] setTintColor:globalTintColor];

由于某种原因,这导致我所有的 UINavigationBar 对象都呈现出它的 tintColor。

我通过简单地替换上面的代码来解决这个问题:

[[SDCAlertView appearance] setButtonTextColor:globalTintColor];

【讨论】:

请注意,tintColorUIAppearance 在 iOS 7 中不能很好地配合使用(实际上不支持)。不过,您的解决方案看起来不错。 @ScottBerrevoets 谢谢!也许这就是我看到意外行为的原因。我正在做一些无论如何都不支持的事情。

以上是关于UIBarButtonItem 标题文本始终是全局色调颜色的主要内容,如果未能解决你的问题,请参考以下文章

删除 iOS UIBarButtonItem 的标题文本

UIBarButtonItem关于全局修改,局部修改

我怎样才能拥有一个同时包含图像和文本的 UIBarButtonItem?

更改 UIBarButtonItem 文本字体大小和颜色

UIBarButtonItem 带有图像和文本以及边框?

UINavigationController 中的常量 UIBarButtonItem