Вы можете сделать это с категорией, которая в основном добавляет новое свойство в UIToolBar. Переопределение drawRect
может работать, но это не обязательно будущее. Та же самая стратегия для кастомных UINavigationBar
перестала работать с iOS 6.
Вот как я это делаю.
.h файл
@interface UIToolbar (CustomToolbar)
@property (nonatomic, strong) UIView *customBackgroundView;
@end
.m файл
#import "CustomToolbar.h"
#import
static char TIToolbarCustomBackgroundImage;
@implementation UIToolbar (CustomToolbar)
- (void)setCustomBackgroundView:(UIView *)newView {
UIView *oldBackgroundView = [self customBackgroundView];
[oldBackgroundView removeFromSuperview];
[self willChangeValueForKey:@"tfCustomBackgroundView"];
objc_setAssociatedObject(self, &TIToolbarCustomBackgroundImage,
newView,
OBJC_ASSOCIATION_RETAIN);
[self didChangeValueForKey:@"tfCustomBackgroundView"];
if (newView != nil) {
[self addSubview:newView];
}
}
- (UIView *)customBackgroundView {
UIView *customBackgroundView = objc_getAssociatedObject(self, &TIToolbarCustomBackgroundImage);
return customBackgroundView;
}
@end
По вашему мнению, код контроллера, например viewDidLoad
if (self.navigationController.toolbar.customBackgroundView == nil) {
self.navigationController.toolbar.customBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navigation_bar_background.png"]];
self.navigationController.toolbar.customBackgroundView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
}