Почему бы просто не добавить свойство 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
Теперь все, что вам нужно сделать, это установить свойство barImage после создания экземпляра UIToobar. 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.
Похоже, это был год с тех пор, как этот вопрос был опубликован, но, надеюсь, это может кому-то помочь.