0

我有点进退两难。这不是一个交易破坏者,但如果有一个像样的答案,我很感兴趣。

我一直在使用 aUIButton和 a 内的自定义子视图UIBarButtonItem(作为条形按钮项的customView)。我的自定义子视图不是aUILabel也不是 a UIImage,这就是我正在做我正在做的事情的原因。这UIBarButtonItem是我导航栏上的一个项目,导航栏tintColor有一套。我希望UIButton具有 的圆角矩形外观UIBarButtonItemStyleBordered,这意味着它也应该采用tintColor其父栏的 。

当前的解决方案已经实现了png从 UIKit for UINavigationBarDefaultButton.pngand family 中提取文件。如果我不设置属性,这看起来会很棒;tintColor相反,当我想要亮橙色(不是我使用的颜色,但你明白我的意思)时,按钮仍然是“iOS 海军蓝”。这让我陷入了两难境地:让 UIButton 看起来和表现得像那种UIBarButtonItem风格的最佳方法是什么,包括继承tintColor属性?我可以自己在按钮上设置该属性;这没什么大不了的。

我想UIButton在 CoreGraphics 中绘制它的背景吗?是否有一个框架/库已经实现了这个?如果我在做不可能的梦,请告诉我。我对手工完成 CoreGraphics 还不是很厉害,但它绝对不在可能的范围之外。

如果无法做到这一点,我知道我总是可以采用UIView我试图修改的很酷的自定义并将其保存为图像(因此UIImage在 a 内部使用UIBarButtonItem),但我想看看这是否是可能的。

这就是我正在处理的(下)。后退按钮看起来很棒,但这只是因为我没有弄乱它。我希望它rightBarButtonItem使用我tintColor设置的,但是为了给它UIBarButtonItemStyleBordered一个集合的外观customView,我不得不让按钮使用png文件作为它的背景。下面是您所看到的,即使tintColor设置在UIBarButtonItem(因为它使用 a png)。

导航栏

4

2 回答 2

1

我确实在 Stack Overflow 上找到了这个问题/答案,这让我离得足够近,我可以翼翼地解决剩下的问题。这是一篇关于如何UIImage用 a着色 a 的详细文章UIColor;我已将它提取到一个函数中,并在此处发布了一个要点。

结合这一点,我定义了一个类别方法UIButton,让我可以使用该背景图像创建一个按钮,着色,然后将其放入一个空的UIBarButtonItem.

+ (id)buttonWithBarStyleAndTintColor:(UIColor *)tintColor customView:(UIView *)customView {
    UIImage *defaultNormal = [UIImage imageNamed:@"UINavigationBarDefaultButton.png"];
    UIImage *defaultPressed = [UIImage imageNamed:@"UINavigationBarDefaultButtonPressed.png"];
    UIImage *back = [TintImageWithTintColor(defaultNormal, tintColor)
                     stretchableImageWithLeftCapWidth:5.0
                     topCapHeight:0.0];
    UIImage *pressed = [TintImageWithTintColor(defaultPressed, tintColor)
                        stretchableImageWithLeftCapWidth:5.0
                        topCapHeight:0.0];

    UIButton *button = [self buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(0, 0, 34.0f, 30.0f);
    [button addSubview:customView];
    customView.userInteractionEnabled = NO;
    customView.frame = CGRectCenterRectInRect(customView.frame, button.frame);
    [button setBackgroundImage:back forState:UIControlStateNormal];
    [button setBackgroundImage:pressed forState:UIControlStateSelected];
    [button setBackgroundImage:pressed forState:UIControlStateHighlighted];
    return button;
}
于 2012-12-16T22:30:19.987 回答
0

您可以尝试将 UIButton 类型设置为自定义并确保其颜色清晰,与您的自定义视图相同,这样唯一可见的视图将是 UIBarButtonItem 色调颜色。

此外,如果您愿意投资,还有一个名为 PaintCode 的工具可以为您编写 CoreGraphics 的代码。

于 2012-12-15T04:21:59.263 回答