UINavigationBar自定义

来源:互联网 发布:windows无iis安装 编辑:程序博客网 时间:2024/06/10 02:08

最近在网络上看到了很多NavigationBar的自定义,主要是关于更换背景图片的。 

     苹果官方给出了一个方法,非常方便: 

?
1
- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics

     但是注意,这需要IOS 5的方法,那么IOS 5之前的版本要怎么办?  

     简单的背景图片可以直接修改tintColor属性,复杂一些的可以参考如下方法。

     -------------------------------------!!!!!!!!-------------------------------------------- 

     第一步: 先建一个xib文件,自己看图:

     

    第二步:   这个建立完了,接下来你要写一个UINavigationController的初始化方法。我们写个分类。

    注:这个方法代替了初始化方法 

?
1
2
3
4
5
@interface UINavigationController (Custom)
 
+ (id)customNavigationControllerWithRootViewController:(UIViewController *)rootViewController;
 
@end
?
1
2
3
4
5
6
7
8
9
10
@implementation UINavigationController (Custom)
 
+ (id)customNavigationControllerWithRootViewController:(UIViewController *)rootViewController
{
    UINavigationController *nav = [[[NSBundle mainBundle] loadNibNamed:@"NavigationController"owner:self options:nil] objectAtIndex:0];
    [nav setViewControllers:[NSArray arrayWithObject:rootViewController]];
    returnnav;
}
 
@end

      

    第三步: 接下来导入你的开源代码,比如我找了个设置NavigationBar背景的代码并导入了我的工程。

    

    注:名称是CustomNavigationBar,打开你的XIB文件,选中NavigationBar,修改它的Class项内容,看图:

    

    这样一来,NavigationBar和NavigationController 以及XIB全部都对应上了!

    下面你就开始工作了,代码直接看图吧:    

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (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];
    returnYES;
}   

    接下来进RootViewController.m里开始设置NavigationBar的背景,首先要强转一下系统默认的UINavigationBar,然后你就可以调NavigationBar里的方法了:

?
1
2
3
4
5
- (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对应的方法了。

     先写到这里吧!
0 0
原创粉丝点击