为什么我不能更改UIBarButtonSystemItem Page Curl项目色调?

时间:2012-07-16 21:11:18

标签: iphone uitoolbar page-curl tint uitoolbaritem

我正在使用带有StoryBoards的iOS 5.1。我想改变标准页面卷曲按钮的色调,但我似乎也不能。

该按钮位于View Controller上,是推导控制器的推送视图控制器。推断工具栏,因为我更改了导航控制器上的色调。工具栏以所需颜色显示。

我的viewDidLoad方法如下:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // adjust the color of the curl button
    if (self.curlButton) {
        NSMutableArray * toolbarItems = [self.toolbarItems mutableCopy];
        [toolbarItems removeObject:self.curlButton];
        UIColor *barColor = self.navigationController.toolbar.tintColor;
        UIBarButtonItem *newPageCurl = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPageCurl target:self.curlButton.target action:self.curlButton.action];
        newPageCurl.tintColor = barColor;
        NSLog(@"%@", newPageCurl.tintColor);
        [toolbarItems addObject:newPageCurl];
        self.toolbarItems = toolbarItems;
    }
}

self.curlButton是在Interface Builder中配置的页面卷曲按钮的插座。

我已经尝试过设置self.curlButton中的色调,这最初为零,但是没有效果,按钮是相同的蓝色色调。

关于SO的一些答案说你必须以编程方式创建一个新按钮,这就是我在这里尝试的。

我已经确认barColor包含正确的颜色。我注释掉了removeObject行并且正确地生成了两个卷曲按钮,但两者都是蓝色的。

NSLog验证newPageCurl按钮是否具有正确的色调集。

我尝试在viewDidAppear中执行所有操作,以防工具栏需要先显示,但按钮仍为蓝色且未使用新色调。

1 个答案:

答案 0 :(得分:0)

从iOS 5开始,您应该可以使用外观选择器来执行此操作。

(编辑,很遗憾,因为卷曲按钮导致误入歧途。外观或外观当包含在:除了卷曲按钮之外似乎工作...甚至其他系统栏按钮项目。对于curl,一位用户说{{{ 3}}工作,但当我测试它时,它对我不起作用。)

    if ([[UIBarButtonItem class] respondsToSelector:@selector(appearanceWhenContainedIn:)])
    {
        id barButtonAppearance
          = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil];
        [barButtonAppearance setTintColor:self.navigationController.toolbar.tintColor];
        barButtonAppearance
          = [UIBarButtonItem appearanceWhenContainedIn:[UIToolBar class], nil];
        // you'll have to have toolbar already, or pick something like [UIColor chartreuseColor] or whatever
        [barButtonAppearance setTintColor:toolbar.tintColor];
    }