UIToolbar 的多个自定义背景

Posted

技术标签:

【中文标题】UIToolbar 的多个自定义背景【英文标题】:Multiple custom backgrounds for UIToolbar 【发布时间】:2011-02-22 14:35:46 【问题描述】:

为了在 tableView 顶部创建一个绝对底部的页脚,我发现为此使用 UIToolbar 并为其添加自定义视图效果很好。

我的问题是我已经将它用作 webview 的工具栏,并且这里有另一个背景图像,而不是我现在需要的。

通过替换 UIToolbar+addition.m 中的 drawRect 函数,我有一个全局工具栏,可以在我的 webviews 中正常工作。

我怎样才能扩展它,以便我可以选择哪个版本(背景)在不同的地方使用?

我的 UIToolbar+addition.m:

#import "UINavigationBar+addition.h"

@implementation UIToolbar (Addition)
- (void) drawRect:(CGRect)rect 
    UIImage *barImage = [UIImage imageNamed:@"toolbar-bg.png"];
    [barImage drawInRect:rect];

@end

【问题讨论】:

【参考方案1】:

尝试为每个“版本”创建单独的 .h 和 .m 文件,并将适当的 .h 导入到您希望它影响的类文件中。

【讨论】:

【参考方案2】:

为什么不给你的扩展添加一个 barImage 属性呢?

@interface UIToolbar (Addition)

@property (nonatomic, retain) UIImage *barImage;

@end

然后,在你的实现中(我这样做是假设你没有使用 ARC。如果你是,显然删除保留/释放的东西):

@implementation UIToolbar (Addition)

@synthesize barImage = _barImage;

//Override barImage setter to force redraw if property set after already added to superView...
- (void)setBarImage:(UIImage *)barImage 
    if (_barImage != barImage) 
        UIImage *oldBarImage = [_barImage retain];
        _barImage = [barImage retain];
        [oldBarImage release];

        //Let this UIToolbar instance know it needs to be redrawn in case you set/change the barImage property after already added to a superView...
        [self setNeedsDisplay];
    
    

- (void) drawRect:(CGRect)rect 
    [self.barImage drawInRect:rect];


//If you're not using ARC...
- (void)dealloc 
    [barImage release];
    [super dealloc];


@end

现在,您所要做的就是在实例化您的 UIToobar 之后设置 barImage 属性。例如:

UIToolBar *myToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; //Or whatever frame you want...
myToolbar.barImage = [UIImage imageNamed:@"toolbar-bg.png"];
[self.view addSubView:myToolbar];
[myToolbar release];

而且,如果您想在它已经出现在屏幕上之后对其进行更改,只需将 barImage 属性设置为新的 UIImage 即可。

这个问题发布已经一年了,但希望这可能对某人有所帮助。

【讨论】:

以上是关于UIToolbar 的多个自定义背景的主要内容,如果未能解决你的问题,请参考以下文章

使用 UINavigationController 默认 UIToolbar 的自定义背景

如何使用自定义背景图像从 UINavigationBar 和 UIToolbar 中删除圆角?

以foursquare方式自定义UIToolBar

来自图像的自定义 UIToolBar

使用自定义图像按钮在 UIToolbar 上命中目标不正确

使用 UIToolBar 上的完成按钮关闭 UIPickerView