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 的自定义背景