UINavigationBar自定义
最近在网络上看到了很多NavigationBar的自定义,主要是关于更换背景图片的。
苹果官方给出了一个方法,非常方便:
- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics
但是注意,这需要IOS 5的方法,那么IOS 5之前的版本要怎么办?
简单的背景图片可以直接修改tintColor属性,复杂一些的可以参考如下方法。
-------------------------------------!!!!!!!!--------------------------------------------
第一步: 先建一个xib文件,自己看图:
第二步: 这个建立完了,接下来你要写一个UINavigationController的初始化方法。我们写个分类。
注:这个方法代替了初始化方法
@interface UINavigationController (Custom)
+ (id)customNavigationControllerWithRootViewController:(UIViewController *)rootViewController;
@end
@implementation UINavigationController (Custom)
+ (id)customNavigationControllerWithRootViewController:(UIViewController *)rootViewController
{
UINavigationController *nav = [[[NSBundle mainBundle] loadNibNamed:@"NavigationController" owner:self options:nil] objectAtIndex:0];
[nav setViewControllers:[NSArray arrayWithObject:rootViewController]];
return nav;
}
@end
第三步: 接下来导入你的开源代码,比如我找了个设置NavigationBar背景的代码并导入了我的工程。
注:名称是CustomNavigationBar,打开你的XIB文件,选中NavigationBar,修改它的Class项内容,看图:
这样一来,NavigationBar和NavigationController 以及XIB全部都对应上了!
下面你就开始工作了,代码直接看图吧:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
//这里
RootViewController *rootVC = [[RootViewController alloc]init];
UINavigationController *nav = [UINavigationController customNavigationControllerWithRootViewController:rootVC];
self.window.rootViewController =nav;
//结束
[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleBlackOpaque];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
接下来进RootViewController.m里开始设置NavigationBar的背景,首先要强转一下系统默认的UINavigationBar,然后你就可以调NavigationBar里的方法了:
- (void) customizeNavBar {
CustomNavigationBar *navBar = (CustomNavigationBar *)self.navigationController.navigationBar;
//下面调CustomNavigationBar的方法了
}
最后:
为什么要这么费事。。。。因为它是只读的属性,所以我们通过修改XIB的方法。
@property(nonatomic,readonly) UINavigationBar *navigationBar;
当然方法还有很多,我只是抛砖引玉。网上代码非常多,还有给navigationBar加阴影的,设置圆角的等。大家可以去网络上找,我就不举例了。
总之,
准备时:
直接把自定义的navigationBar的.h和.m拖进工程,在我们弄好的xib里修改navigationBar的Class名称,使之保持一致。最后使
使用时:
用分类创建的方法初始化加载这个xib,然后在对应的ViewController里强转navigationBar,然后就可以调用自定义的navigationBar对应的方法了。
转载于:https://my.oschina.net/lvlove/blog/102651
推荐阅读