导航栏

详解UITabBarController和NavigationC

2017-08-10  本文已影响71人  纯情_小火鸡

大家都知道,对于常规的UI,我们可以使用 TNV (UITabBarController -> NavigationController -> ViewController) 架构去搭建项目框架

TabBarController:

UITabBarController为应用管理了多个顶层的按钮栏和转换视图,使用的时候需要将其视图添加到视图层次结构中,然后依次添加顶级视图控制器,如果在选项卡栏控制器中添加了大于五个视图控制器,则只显示前四个控制器。其余部分将在自动生成的更多项下访问。属性中有viewControllers,是viewController的集合; 一个** UITabBar 对象;还有一个UITabBarControllerDelegate**代理对象,代理方法就不一一列举了,经常用到的有:

UITabBar

UITabBarItem

UIBarItem

是一个抽象类,主要是使用其子类UIBarButtonItem和UITabBarItem。他遵循了UIAppearance协议,包括title,image,imageInsets等属性

UIApearance

实际上是一个协议(Protocol),我们可以用它来获取一个类的外观代理(Appearance Proxy)。该协议需实现这几个方法:

UIAppearanceContainer是用于Class实现的协议,通常是ViewController,对于需要支持使用 appearance 来设置的属性,在属性后增加 UI_APPEARANCE_SELECTOR 宏声明。每一个实现 UIAppearance 协议的类,都会有一个 _UIApperance 实例,保存着这个类通过 appearance 设置属性的 invocations,在该类被添加或应用到视图树上的时候,它会检查并调用这些属性设置。这样就实现了让所有该类的实例都自动统一属性。

注意事项

UINavigationController:

UINavigationController管理堆栈视图控制器和一个导航栏,它用来组织有层次关系的视图。如果一个navigation controller是内嵌在 tabbar controller中,他会使用堆栈底部的view controller 的标题和工具栏属性。

子控制器通过pop方法从栈顶移除,先销毁的是子控制器本身,然后子控制器里面的View才被销毁,因为子控制器是持有View的。

- (instancetype)initWithRootViewController:(UIViewController *)rootViewController;// Convenience method pushes the root view controller without animation.实际上是调用导航控制器的push方法。

当导航控制器通过push,pop或者设置视图控制器的堆栈显示了一个新的顶部控制器时会调用UINavigationControllerDelegate的代理方法。

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;

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

...

UINavigationBar

最典型的用法就是放在屏幕顶端,包含着各级视图的导航按钮。它主要的几个属性是左按钮(返回按钮)、中心标题,以及可选的右按钮(实际上UINavigationBar并没有这些属性,其实是使用到其中的UINavigationItem)

UINavigationItem

每个视图控制器的导航项元素由所在视图控制器的navigationItem管理

UIBarButtonItem

同样继承自UIBarItem,是专门放在UIToolbar/ UINavigationBar上的控件,具有按钮的行为,有许多初始化的方法,包括title,image或者完全customView的。

UIStatusBar:

前景部分:指的显示电池、时间等部分;

背景部分:就是显示黑色或者图片的背景部分;


一些常用的Tip:

Demo下载

上一篇下一篇

猜你喜欢

热点阅读