Iphone 如何将UINavigationBar子类化以使用Three20/iOS5?

Iphone 如何将UINavigationBar子类化以使用Three20/iOS5?,iphone,ios,uinavigationcontroller,three20,uinavigationbar,Iphone,Ios,Uinavigationcontroller,Three20,Uinavigationbar,你们中的许多人可能已经注意到,我们不能再创建一个类别来覆盖iOS5中的UINavigationBardrawRect。实际上,如果不使用UINavigationBar的子类并将其设置在MainWindow.xib中的navigationController->navigationBar中,我就看不到实现这种定制的好方法。但是,TTNavigator无法识别navigationController,因为每个TTViewController都有自己的超类TTNavigationController,

你们中的许多人可能已经注意到,我们不能再创建一个类别来覆盖iOS5中的
UINavigationBar
drawRect
。实际上,如果不使用
UINavigationBar
的子类并将其设置在MainWindow.xib中的navigationController->navigationBar中,我就看不到实现这种定制的好方法。但是,TTNavigator无法识别
navigationController
,因为每个
TTViewController
都有自己的超类
TTNavigationController

,我不知道如何解决这一问题,但一般来说,为了支持IOS 5,您可以使用这种方法

UIImage *image = [UIImage imageNamed:@"header.png"];

if([navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
    //iOS 5 new UINavigationBar custom background
    [navigationBar setBackgroundImage:image forBarMetrics: UIBarMetricsDefault];
} 
else{
    UIImageView *imgView = [[[UIImageView alloc] initWithImage:image] autorelease];
    [imgView setUserInteractionEnabled:NO];
    [imgView setTag:TOOLBAR_TAG];
    [navigationBar insertSubview:imgView atIndex:0];
}

我把这段代码放在一个helper函数中,我在我的应用程序委托方法中调用它,
code
-(BOOL)application:(UIApplication*)应用程序使用选项完成启动:(NSDictionary*)launchoptions谢谢,我刚刚用你说的方法解决了它,但我在应用程序委托中使用[UINavigationBar外观],但实际上我不知道如何处理iOS5以下的设备,因为它们不提供外观离开drawRect:在设置导航图像的appDelegate中,iOS5不会调用它,但它下面的所有内容都会调用它。