UIToolbar的多个自定义背景

时间:2011-02-22 14:35:47

标签: iphone image uitoolbar drawrect

为了在tableView上创建一个绝对有底的页脚,我发现使用UIToolbar为此并为其添加自定义视图工作正常。

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

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

如何扩展它以便我可以选择使用不同位置的版本(背景)?

我的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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

为什么不在您的扩展程序中添加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属性。 e.g:

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即可。

看起来这个问题发布已经过去了一年,但希望这可能有助于某人。