为了在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
答案 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即可。
看起来这个问题发布已经过去了一年,但希望这可能有助于某人。