UIBarButtonItem tintColor 停止工作

Posted

技术标签:

【中文标题】UIBarButtonItem tintColor 停止工作【英文标题】:UIBarButtonItem tintColor stopped working 【发布时间】:2014-03-10 11:56:31 【问题描述】:

由于某种原因,我不能在我的视图上使用 UINavigationBar,而是使用 UIToolBar。我正在使用带有清晰 tintColor 的虚拟左按钮和带有黑色 tintColor 的标题按钮来正确居中标题并隐藏虚拟左栏按钮,但它不再起作用,并且虚拟左按钮和标题按钮都获得主 tintColor 或者如果我禁用它们,它们变成灰色。

如何将它们理想地禁用为按钮并设置正确的 tintColor(清晰和黑色)?

- (void)addToolbar

    CGFloat barHeight = 44.0;
    UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(self.view.bounds.origin.x, self.view.bounds.size.width - barHeight, self.view.bounds.size.height, barHeight)];

    UIBarButtonItem *flexibleSpaceButtonItem = [[UIBarButtonItem alloc]
                                                initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                                target:nil action:nil];

    // Done button on the right
    UIBarButtonItem *doneButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)];

    // dummy button on the left to have centered title
    UIBarButtonItem *dummyButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:nil action:nil];
    dummyButtonItem.enabled = NO;
    dummyButtonItem.tintColor = [UIColor clearColor];

    // title button
    UIBarButtonItem *titleButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Title text here" style:UIBarButtonItemStylePlain target:nil action:nil];
    titleButtonItem.enabled = NO;
    titleButtonItem.tintColor = [UIColor blackColor];

    // set toolbar items
    toolbar.items = @[dummyButtonItem,flexibleSpaceButtonItem, titleButtonItem, flexibleSpaceButtonItem,doneButtonItem];

    [self.view addSubview:toolbar];

【问题讨论】:

你是否尝试过覆盖BarButtonItem Class 不,上面的代码工作正常,突然停止工作。 @MartinKoles 如果它工作正常,你改变了其他东西,打破了这个 @elio.d 你是对的,看看我自己的回答。谢谢。 【参考方案1】:

当您为视图指定色调时,色调会自动传播到视图层次结构中的所有子视图。由于 UIWindow 继承自 UIView,因此您可以通过使用如下代码设置窗口的 tint 属性来为整个应用程序指定一种着色颜色:

application:didFinishLaunchingWithOptions:

window.tintColor = [UIColor purpleColor];

来源 - ios Transitions 。在使用色调颜色部分

查看它

【讨论】:

已解决,请参阅我自己的答案。你帮我解决了这个问题。谢谢。【参考方案2】:

根据您的反馈,我发现通过在 AppDelegate 中执行此操作:

self.window.tintColor = [UIColor colorWithRed:255/255.0 green:59/255.0 blue:48/255.0 alpha:1.0];
[[UITextField appearance] setTintColor:[UIColor colorWithRed:66/255.0 green:107/255.0 blue:242/255.0 alpha:1.0]];

第二行导致我的问题。我现在需要找出为什么我把第二行放在那里:)。感谢您的帮助。

【讨论】:

我什至不明白。为什么要更改UITextField 的外观? 我在 tableView 中有一些登录文本字段,我猜我需要它们是灰色的。我会调查的。 在应用程序的登录部分,我需要 textField 中的光标为系统蓝色,而不是像所有其他 UI 元素一样为系统红色。我在第二行调整光标颜色。 UITextField.appearance 和 UITextView.appearance 似乎都破坏了 UIBarButtonItem 的色调,即使是在 Storyboard 中设置的那些。令人困惑和令人沮丧的错误。

以上是关于UIBarButtonItem tintColor 停止工作的主要内容,如果未能解决你的问题,请参考以下文章

uibarbuttonitem tintColor

如何颜色选择 UIBarButtonItem tintColor

如何在 Swift 中更改 UIBarButtonItem 的 tintColor?

如何将 UIBarButtonItem tintcolor 设置为非默认 UIColor

在 UIToolbar 中的 UIBarButtonItem 上更改 tintColor 会导致按钮消失并从左侧动画化

在导航栏中自定义 UIBarButtonItem