如何使用自定义的UINavigationBar
我有UINavigationBar
子类。
@interface MyNavigationBar : UINavigationBar
做了一些改变,现在希望我的应用程序NavigationController
将使用它:
_navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController]; [_window addSubview:[_navigationController view]]; [self.window makeKeyAndVisible];
我希望_ navigationController将MyNavigationBar
这可以怎么做?
谢谢。
你必须在其中创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];