UIViewController
UIViewController继承了UIResponder,而UIResponder继承了NSObject,UIViewController是所有视图控制器的父类。
在MVC模式中,UIViewController扮演C(controller)的角色,控制视图以及模型的操作。
如果新建工程或新建ViewController时关联了.xib文件,则在viewDidLoad方法中进行一些初始化工作,如果手动加载.xib视图,则需要从loadView中进行视图控制器的创建工作。
ViewController的简单生命周期:
loadView:创建视图控制器(如果不是从.xib加载)
viewDidLoad:视图已加载
viewWillAppear:视图加载前运行
viewWillDisappear:视图消失前(被关闭或覆盖)运行
willRotateToInterfaceOrientation:duration:开始旋转时运行
didRotateToInterfaceOrientation:旋转结束时运行
loadView和viewDidLoad的区别:
loadView在视图初始化的时候调用,应用开启后只调用一次
viewDidLoad在每次进入一个视图的时候都会调用
presentViewController 跳转到下一个Controller
dismissViewController 隐藏当前Controller
UINavigationController
带有导航条的Controller,使用堆栈的方式进行管理Controller
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
ViewController *home = [[ViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:home];
home.title = @"Dribbble";
[self.window setRootViewController:navController];
[self.window makeKeyAndVisible];
return YES;
}
Controller 进行跳转
ShotDetailsController *shotsDetailVC = [[ShotDetailsController alloc] init];
shotsDetailVC.shotDetilsDic = [shots objectAtIndex:indexPath.row];
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] init];
backItem.title = @"返回";
self.navigationItem.backBarButtonItem = backItem;
[self.navigationController pushViewController:shotsDetailVC animated:YES];
pushViewControllerAnimated:方法将视图控制器推入栈顶,
popViewControllerAnimated:方法将视图控制器弹出堆栈。
UITabBarController
UITabBarController是选项卡栏导航控制器,显示效果是在页面底部有多个选项卡,通过点击不同选项卡可以在不同的ViewController之间进行切换。
这种对象的层次结构至少包含6个对象:
一个UITabBarController;
两个UIViewController;
一个UITabBar;
两个UITabBarItem;
UITabBarController是选项卡栏视图控制器,UITabBar是底部两个UITabBarItem的容器,管理两个UITabBarItem,每个UITabBarItem对应一个UIViewController,然后每个UIViewController都有自己的视图和视图控制器。
UITabBarController中有一个viewControllers属性,这是一个NSArray,包含选项卡控制器的视图控制器