欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

UINavigationBar自定义

程序员文章站 2022-05-30 12:07:49
...

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

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

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

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

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

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

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

     UINavigationBar自定义

    第二步:   这个建立完了,接下来你要写一个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背景的代码并导入了我的工程。

    UINavigationBar自定义

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

    UINavigationBar自定义

    这样一来,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