Я не думаю, что это возможно с категорией на UINavigationBar
.
Я бы предложил подкласс, скажем CustomNavigationBar
.h
#import <UIKit/UIKit.h>
@interface CustomNavigationBar : UINavigationBar {
}
@end
.m
#import "CustomNavigationBar.h"
@implementation CustomNavigationBar
- (void)drawRect:(CGRect)rect {
UIImage *img = [UIImage imageNamed: @"navigation_background.png"];
[img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
Хитрость в том, что вы никогда не создаете UINavigationBar
самостоятельно, все это обрабатывается UIKit. Чтобы изменить внешний вид только некоторых баров, вам нужно будет вручную изменить их класс во время выполнения.
Импорт
#import <objc/runtime.h>
И в вашем контроллере представления (например, в viewDidLoad) добавьте
object_setClass(self.navigationController.navigationBar, [CustomNavigationBar class]);