如何使用自定义的UINavigationBar

我有UINavigationBar子类。

 @interface MyNavigationBar : UINavigationBar 

做了一些改变,现在希望我的应用程序NavigationController将使用它:

  _navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController]; [_window addSubview:[_navigationController view]]; [self.window makeKeyAndVisible]; 

我希望_ navigationControllerMyNavigationBar

这可以怎么做?

谢谢。

你必须在其中创build一个带有UINavaigationController 。 然后,您可以在Interface Builder中selectnavigationBar栏,然后将该类更改为UINavigationBar的子类。

在这里输入图像说明

然后为了使这个实例化更容易一点,我把一个类别添加到`UINavigationController中,例如:

 @interface UINavigationController (DSCNavigationController) + (UINavigationController *)dsc_navigationControllerWithRootViewController:(UIViewController *)rootViewController; @end @implementation UINavigationController (DSCNavigationController) + (UINavigationController *)dsc_navigationControllerWithRootViewController:(UIViewController *)rootViewController; { NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"DSCNavigationController" owner:nil options:nil]; NSAssert(1 == [topLevelObjects count], @"DSCNavigationController should have one top level object"); UINavigationController *navigationController = [topLevelObjects objectAtIndex:0]; NSAssert([navigationController isKindOfClass:[UINavigationController class]], @"Should have a UINavigationController"); [navigationController pushViewController:rootViewController animated:NO]; return navigationController; } @end 

在使用它的类的顶部,确保在我的情况下导入类别它看起来像

 #import "UINavigationController+DSCNavigationController" 

然后使用它看起来像

 MyViewController *myViewController = [[MyViewController alloc] init]; UINavigationController *navigationController = [UINavigationController dsc_navigationControllerWithRootViewController:myViewController]; 

UINavigationController具有只读属性

 @property(nonatomic, readonly) UINavigationBar *navigationBar 

因为它是只读的,所以你必须inheritanceUINavigationBar并覆盖这个属性,或者使之成为read-write.Eg:

 MyNaviagtionBar *myBar = [[MyNavigationBar alloc] init]; _navigationController.navigationBar = mybar; 

或子类:

MyNavigationController.h

 @class MyNavigationBar; @interface MyNavigationController : UINavigationController @property(nonatomic, strong) MyNavigationBar *navigationBar; @end 

MyNavigationController.m

 @implementation MyNavigationController @synthesize navigationBar = _navigationBar; @end 

然后改变

 _navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController]; 

 _navigationController = [[MyNavigationController alloc] initWithRootViewController:self.viewController];