В соответствии с запросом, здесь идет мой слегка непослушный и не очень отполированный хак.Это действительно просто для того, чтобы осчастливить OP.Правильный ответ дал sergio.
UINavigationBar + CustomDraw.m
NSString *gNavbarBackgroundImageName = @"default_navbar_background.png";
@implementation UINavigationBar (CustomBackground)
- (void)drawRect:(CGRect)rect
{
if (gNavbarBackgroundImageName != nil)
{
UIImage *image = [UIImage imageNamed:gNavbarBackgroundImageName];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
}
@end
UINavigationBar + CustomDraw.h
extern NSString *gNavbarBackgroundImageName;
И вот пример использования в двух контроллерах представления ...
FooViewController.m
#import "UINavigationBar+CustomDraw.h"
@implementation FooViewController
- (void)viewWillAppear:(BOOL)animated
{
gNavbarBackgroundImageName = @"foo_navbar_background.png";
[self.navigationController.navigationBar setNeedsDisplay];
}
@end
BarViewController.m
#import "UINavigationBar+CustomDraw.h"
@implementation BarViewController
- (void)viewWillAppear:(BOOL)animated
{
gNavbarBackgroundImageName = @"bar_navbar_background.png";
[self.navigationController.navigationBar setNeedsDisplay];
}
@end
Теперь давайте предположим, что вы хотите показать нестандартную панель навигации, например, при отображении страницы входа в Facebook(в соответствии с их SDK).
Используйте это, чтобы предотвратить любое пользовательское рисование:
gNavbarBackgroundImageName = nil;
Примечание Некоторые компоненты Apple используют UINavigationBar в местах, которые вы не можетедумал о.Например, MPMoviePlayerController
использует настраиваемую панель навигации для отображения верхней части своего пользовательского интерфейса - так что это будет другой случай, когда вы хотите запретить пользовательское рисование.