0

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

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

我的 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,最初为 nil,但这不起作用,按钮是相同的蓝色色调。

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

我已验证barColor包含正确的颜色。我注释掉了这removeObject条线并且正确地产生了两个卷曲按钮,但都是蓝色的。

NSLog 验证newPageCurl按钮是否设置了正确的色调。

我尝试这样做viewDidAppear,以防需要首先显示工具栏,但按钮仍然是蓝色并且没有使用新的色调。

4

1 回答 1

0

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

(编辑,很抱歉让 curl 按钮误入歧途。外观或外观WhenContainedIn:似乎适用于除 curl 按钮之外的所有内容......甚至其他系统栏按钮项目。对于 curl,一位用户说UIBarButtonSystemItem PageCurl 的解决方案不会改变工具栏的颜色有效,但是当我测试它时,它对我不起作用。)

    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];
    }
于 2012-07-16T21:37:36.170 回答