iOS基础 - 控制器管理

1、Container

一个iOSapp不多只由一个ViewController组成,除非这个app极其简单。当app中有多个ViewController的时候,咱们就须要对这些ViewController进行管理app

容器:负责展现一个或者多个ViewController,并管理这些View Controller的视图生命周期性能

大部分容器自己也是一个ViewController, 被容器管理的这些控制器能够称为容器的子控制器(ChildViewController),而容器能够被称为父控制器(parentViewController)spa

也有极少数容器不是ViewController,好比UIPopoverController,其继承于NSObject对象

经常使用的ContainerUITabbarController、UINavigationController继承

2、Container的特征

能够添加ChildViewController, 移除ChildViewController,切换ChildViewController的显示,生命周期

持有全部ChildViewController的实例(通常存在NSArray)事件

负责ChildViewController的生命周期方法的调用图片

(viewWillAppear,viewDidAppear,viewWillDisaapper,viewDidDisappear),以及旋转事件的传递it

3、UITabBarController

一个UITabBarControllerview由两部分组成io

上面部分用来容纳子控制器的view

下面部分是一个UITabBar对象,会根据子控制器的tabBarItem属性生成相应的图标和标题

4、UITabBarController添加子控制器

经过设置viewControllers属性或者addChildViewController方法能够添加子控制器

NSArray *viewControllers

- (void)addChildViewController:(UIViewController *)childController

5、UITabBarItemUITabbar

UIViewControllertabBarItem属性决定了UITabBar显示的内容

使用系统自带的UITabBarItem样式:

controller.tabBarItem = [[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemSearch tag:1] autorelease];

本身设置UITabBarItem的标题和图片:

controller.tabBarItem.title = @More

// controller.title也能够用于设置标题

controller.tabBarItem.image = [UIImage imageNamed:@more];

设置UITabBarItem右上角的红色数字

controller.tabBarItem.badgeValue = @10;

6、UINavigationController

UINavigationController也是容器的一种,负责子控制器之间的跳转

UINavigationController以栈的形式保存子控制器,这里的栈实际上是个NSArray对象,只有位于栈顶的子控制器的view才是可见的

初始化UINavigationController时,须要传入一个UIViewController实例做为根控制器,这个根控制器永远处于栈底(若是栈中只有一个对象,那么根控制器也处于栈顶)

将某个UIViewController压入栈时,控制器的视图会从窗口右侧滑入;出栈时,栈顶的控制器会被移除,其下的控制器的视图会从窗口左侧滑入

经常使用属性:

UIViewController *topViewController 处于栈顶的子控制器

NSArray *viewControllers 栈,存放着全部的子控制器

7、UINavigationController结构

UINavigationControllerview包括了两大部分:

上面是UINavigationBar

下面是topViewControllerviewtopViewControllernavigationItem属性决定了UINavigationBar显示的内容

8、UINavigationBar的标题

注意:UINavigationItem并非UIView的子类

9、UINavigationItem

除了titleUINavigationItem还有一些属性可以影响UINavigationBar的显示内容

UIBarButtonItem *backBarButtonItem 左上角的返回按钮

UIView *titleView   中间的标题视图

UIBarButtonItem *leftBarButtonItem  左上角的视图

UIBarButtonItem *rightBarButtonItem  右上角的视图

10、UINavigationBarUINavigationItem

UINavigationController添加子控制器

UINavigationControllerpushViewController:animated:方法能够将一个控制器压入栈中

子控制器都有个navigationController属性,能够获取当前的UINavigationController对象

假如从子控制器c1跳转到子控制器c2,能够这样作:

[c1.navigationController pushViewController:c2 animated:YES];

相关文章
相关标签/搜索