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