Вот быстрый взлом - используйте свойство tag на панели навигации, чтобы включить пользовательский код, например
@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
if (tag < 500) {
// Drawing code
UIImage *img = [UIImage imageNamed: @"navbar_background.png"];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, CGRectMake(0, 0, 320, self.frame.size.height), img.CGImage);
} else {
// Do the default drawing
}
}
@end
Теперь контроллеры навигации с тегом менее 500 используют ваш собственный фон.Если вы установите для тега значение> 500, вы получите поведение по умолчанию.
EDIT
Как правильно заметил @MikeWeller, у нас нет доступа к первоначальной реализацииdrawRect, наша категория переопределила его.
Взгляните на эту ссылку для решения - в основном, это макрос, который вы можете включить, который дает вам дополнительный метод:
@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
if (tag < 500) {
// Drawing code
UIImage *img = [UIImage imageNamed: @"navbar_background.png"];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, CGRectMake(0, 0, 320, self.frame.size.height), img.CGImage);
} else {
// Do the default drawing
invokeSupersequent(rect);
}
}
@end
NB. Я сам не пробовал этого, но с большим успехом использовал другие статьи из этого блога, поэтому я верю в это :) Дайте нам знать, как вы ладите!