###############################################################
首先,为appDelegate增加一个navigationController属性:
@interface DymAppDelegate : UIResponder <UIApplicationDelegate> { UINavigationController *navController_; } @property (strong, nonatomic) UIWindow *window; @property (strong, nonatomic) DymViewController *viewController; @property (nonatomic, readonly, retain) UINavigationController *navigationController; @end
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; self.viewController = [[[DymViewController alloc] initWithNibName:@"DymViewController" bundle:nil] autorelease]; //rootViewController设置为navigationController self.window.rootViewController = self.navigationController; self.viewController = nil; [self.window makeKeyAndVisible]; return YES; }
- (UINavigationController*)navigationController { if (navController_ == nil) { UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.viewController]; // Archive navigation controller for changing navigationbar class [navController navigationBar]; NSMutableData *data = [[NSMutableData alloc] init]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [archiver encodeObject:navController forKey:kRootKey]; [archiver finishEncoding]; [archiver release]; [navController release]; // Unarchive it with changing navigationbar class NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; [unarchiver setClass:[CustomNaviBar class] forClassName:NSStringFromClass([UINavigationBar class])]; navController_ = [[unarchiver decodeObjectForKey:kRootKey] retain]; [unarchiver release]; [data release]; } return navController_; }
利用NSKeyedArchiver和NSKeyedUnarchiver来修改navigationbar。。。