Iphone 如何将UINavigationBar子类化以使用Three20/iOS5?
你们中的许多人可能已经注意到,我们不能再创建一个类别来覆盖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,
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不会调用它,但它下面的所有内容都会调用它。