UINavigationController

NavigationController:导航栏

     

     NavigationControlller学了两天,罪过罪过,学习这个的过程中发现了好多小问题,最后才发现是庸人自扰。确实效率不高了啊。

      不废话了,总结一下这个导航栏吧。

主要作用:


    它是一个导航控制器,专门管理具有层级关系的视图,每一个视图里面包含三个东东

  • navigationBar


    就是最上面的那个导航视图如下图

      吐槽:Mac下的有道竟然不能贴图,强烈鄙视一下,还得用自带的截图工具

  • contentview


    也就是bar下面的视图部分,如下图所示,注意哦,这里不一定是包含到底部,因为底部可能会又第三个控件。

  • toolBar


    这个东东一般都不用,所以cocoa自动给我们默认设置为隐藏了。


那怎么使用navigationController呢



    说使用其实就是怎么实现上下页面的翻页,它提供了两种方法,一个是push大法,就是显示将要显示的下一个页面,一个是pop大法,pop大法里又3个绝招,主要功能是返回到上一个页面或者返回到上一个任意界面。

  • push大法:secondController是一个UIViewController,animated是是否显示动画的意思


    

[self.navigationController pushViewController :secondController animated:YES];


  • pop大法:


    绝招一:跳转到根视图       

[self.navigationController popToRootViewControllerAnimated:YES];

       绝招二:跳转到上一个视图           

[self.navigationController popViewControllerAnimated:YES];

    绝招三:跳转到任意上一个界面,这个得特别说明一下,如何找到上一个任意界面呢,navigationcontroller提供给我们一个方法就是它会记录所有得viewcontrollers,我们只需要在里面找到我们的controller就ok了

    UIViewController *viewController = [self.navigationController.viewControllers objectAtIndex:1];
    
    // 返回到任意视图 第二个视图,下标为1
    [self.navigationController popToViewController:viewControlleranimated:YES];

    绝招4:当然我们还可以通过代理知道我们当前正在显示的view,还有堆栈里有多少个viewcontroller。

方法如下:

    首先要遵循协议:        UINavigationControllerDelegate

    然后实现代理函数,这里就可以看到对应的view了,你也可以通过其属性值viewControllers(当前所有的堆栈) ,topControllers(栈顶元素) visibleControllers(当前显示顶栈元素)监听其栈顶的变化

 (void)navigationController:(UINavigationController*)navigationController didShowViewController:(UIViewController*)viewController animated:(BOOL)animated

----------------------------------

   好,然后我们讲讲它里面的组成元素吧,就只说说navigationBar就可以了,因为toolBar一般不用,而且我也没有看,contentView就是普通的view,我们新建新的button啊lable阿什么的然后通过addsubview添加到它上面就可以了。


UInavigationBar:UINaivigationBar是一个单独的类,一般用来管理UInavigationController的subviewcontroller,但是它可以不是专属哦,可以在其他的view中显示。


它的几个总要属性就是:

1.左侧按钮items,这个可以是一堆的按钮,一个数组的按钮都可以,系统默认会有一个左部的按钮,那个按钮和UiNavigationBar没有关系,如果你设置了左按钮,那么系统按钮就会消失。


2.中间的item,一般都是显示标题,这里是一个view,所以你放一个button也是可以的,如果你够变态


3.右侧的按钮item,也是自定义的,搞定左就可以搞定右了。


4.设置背景色tintcolor(这个是你添加了items以后才能看到的效果,因为它设置的是items的颜色),设置是否透明translucent,设置类型样式barstyle



下面是设置右视图的方法;

    

    UIButton * aButton = [UIButton buttonWithType:UIButtonTypeContactAdd];
    self.navigationItem.titleView = aButton;
//
    // 设置导航栏右视图 方式一
//    UIBarButtonItem *barButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(doSoming:)];
    
    //方式二
//    UIBarButtonItem *barButton = [[UIBarButtonItem alloc]initWithTitle:@"国家" style:UIBarButtonItemStyleBordered target:self action:@selector(doSoming:)];
    
    // 方式三
    UIBarButtonItem *barButton = [[UIBarButtonItemalloc]initWithCustomView:aButton];



设置背景图片的方法:

[firstNC.navigationBar setBackgroundImage:[UIImageimageNamed:@"navigationbar.png"] forBarMetrics:UIBarMetricsDefault];
设置tintcolor:
     firstNC.navigationBar.tintColor = [UIColor yellowColor];
设置导航条样
    firstNC.navigationBar.barStyle = UIBarStyleBlack;
 设置透明度
     firstNC.navigationBar.translucent = NO;


还有设置标题/设置标题字体样式,对齐方式字体位置等参见这个哥们的书:

http://www.360doc.com/content/13/1011/14/14189693_320570608.shtml

有问题可以到我的IOS自学群里大家一起讨论:321451478

转载于:https://my.oschina.net/u/1392520/blog/282595

你可能感兴趣的:(UINavigationController)