将后退按钮的背景更改为与导航栏相同

时间:2013-03-27 14:58:17

标签: iphone ios

我正在尝试为其上的导航栏和按钮实现自定义图像。我设法使用此

为我的导航背景设置了正确的设置

this is what happens with the code below

        - (void)customAppearance
{  
    UIImage* NavBG = [UIImage imageNamed:@"header.png"];
    [[UINavigationBar appearance] setBackgroundImage:NavBG forBarMetrics:UIBarMetricsDefault];
}

但是当我尝试为后退按钮或其他按钮做类似的事情时,它们只是混合在一起(我可以看到后退按钮的字样,但没有后退按钮的轮廓)

这是我的后退按钮

UIImage *backButtonBG = [[UIImage imageNamed:@"header.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 13, 0, 6)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonBG forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

我希望看起来像这样:what the goal is

2 个答案:

答案 0 :(得分:1)

我认为最简单的方法是让你也修改导航栏,因为默认情况下那些条形物品总是使用导航栏的颜色。

[[UINavigationBar appearance] setTintColor:[UIColor redColor]];

或者您可以使用rgb值

来使用更精确的颜色
[[UINavigationBar appearance] setTintColor:[UIColor colorWithRed:val green:val blue:val alpha:1]];

答案 1 :(得分:0)

我使用自定义图像创建了我的有色按钮(请参阅末尾的代码)然后只需将leftBarButtonItem设置为此按钮即可。

+ (UIBarButtonItem *)createBarButtonItemWithImage:(UIImage *)normalImage highlightedImage:(UIImage *)highlightedImage
{
    UIBarButtonItem *barButtonItemToReturn;
    if (normalImage == nil && highlightedImage == nil)
    {
        return barButtonItemToReturn;
    }
    else if (normalImage != nil)
    {
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        [button setImage:normalImage forState:UIControlStateNormal];

        if (highlightedImage != nil)
        {
            [button setImage:highlightedImage forState:UIControlStateHighlighted];
            [button setFrame:CGRectMake(0, 0, normalImage.size.width, normalImage.size.height)];
        }

        barButtonItemToReturn = [[UIBarButtonItem alloc] initWithCustomView:button];
    }
    return barButtonItemToReturn;
}

如果要添加目标/操作,则必须通过以下方式添加:

 [((UIButton*)barButtonItem.customView) addTarget:self selector:@selector(doSomething:) forControlEvents:UIControlEventTouchUpInside];

您还可以使用可调整大小的图片等