iOS开发 - UIViewController控制器管理

创建一个控制器

控制器常见的创建方式有以下几种
//通过storyboard创建

//直接创建
ViewController *vc = [[ViewController alloc] init];

//指定xib文件来创建
ViewController *vc = [ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

通过storyboard创建控制器

//先加载storyboard文件(Test是storyboard的文件名)
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Test" bundle:nil];

//接着初始化storyboard中的控制器 初始化“初始控制器”(箭头所指的控制器)
ViewController *vc = [storyboard instantiateInitialViewController];

//通过一个标识初始化对应的控制器
ViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"vc"];

ViewController的view的创建

控制器view的延迟加载

控制器的view是延迟加载的:用到时再加载

可以用isViewLoaded方法判断一个UIViewController的view是否已经被加载

控制器的view加载完毕就会调用viewDidLoad方法

多控制器

一个iOS的app很少只由一个控制器组成,除非这个app极其简单

当app中有多个控制器的时候,我们就需要对这些控制器进行管理

有多个view时,可以用一个大的view去管理1个或者多个小view

控制器也是如此,用1个控制器去管理其他多个控制器

比如,用一个控制器A去管理3个控制器B、C、D

控制器A被称为控制器B、C、D的“父控制器”

控制器B、C、D的被称为控制器A的“子控制器”

//为了便于管理控制器,iOS提供了2个比较特殊的控制器
UINavigationController
UITabBarController

UINavigationController的子控制器

UINavigationController的使用步骤
初始化UINavigationController
设置UIWindow的rootViewController为UINavigationController
根据具体情况,通过push方法添加对应个数的子控制器
UINavigationController以栈的形式保存子控制器
@property(nonatomic,copy) NSArray *viewControllers;
@property(nonatomic,readonly) NSArray *childViewControllers;

//使用push方法能将某个控制器压入栈
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;

使用pop方法可以移除控制器
//将栈顶的控制器移除
- (UIViewController *)popViewControllerAnimated:(BOOL)animated;
//回到指定的子控制器
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
//回到根控制器(栈底控制器)
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;

修改导航栏的内容

导航栏的内容由栈顶控制器的navigationItem属性决定

UINavigationItem有以下属性影响着导航栏的内容
//左上角的返回按钮
@property(nonatomic,retain) UIBarButtonItem *backBarButtonItem;
//中间的标题视图
@property(nonatomic,retain) UIView          *titleView;
//中间的标题文字
@property(nonatomic,copy)   NSString        *title;
//左上角的视图
@property(nonatomic,retain) UIBarButtonItem *leftBarButtonItem;
UIBarButtonItem *rightBarButtonItem
//右上角的视图
@property(nonatomic,retain) UIBarButtonItem *rightBarButtonItem;

UIViewController的生命周期

#import "ZLOneViewController.h"

@implementation ZLOneViewController

/**
 *  view加载完毕就会调用
 */
- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"窗口一view加载完毕就会调用---viewDidLoad");
}

/**
 *  view即将显示到window上就会调用
 */
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    NSLog(@"窗口一view即将显示到window上就会调用---viewWillAppear:");

}

/**
 *  view显示完毕就会调用(已经显示到窗口上)
 */
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    NSLog(@"窗口一view显示完毕就会调用(已经显示到窗口上)---viewDidAppear:");

}

/**
 *  view即将从window上移除就会调用(即将看不见)
 */
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    NSLog(@"窗口一view即将从window上移除就会调用(即将看不见)---viewWillDisappear:");

}

/**
 *  view从window上完全移除就会调用(完全看不见)
 */
- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    NSLog(@"窗口一view从window上完全移除就会调用(完全看不见)---viewDidDisappear:");

}

/**
 *  view即将销毁时就会调用
 */
- (void)viewWillUnload
{
    [super viewDidUnload];
    NSLog(@"窗口一view即将销毁时就会调用---viewWillUnload");
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 12:07:31

iOS开发 - UIViewController控制器管理的相关文章

[转载]对iOS开发中内存管理的一点总结与理解

对iOS开发中内存管理的一点总结与理解 做iOS开发也已经有两年的时间,觉得有必要沉下心去整理一些东西了,特别是一些基础的东西,虽然现在有ARC这种东西,但是我一直也没有去用过,个人觉得对内存操作的理解是衡量一个程序员成熟与否的一个标准.好了,闲话不说,下面进入正题. 众所周知,ObjectiveC的内存管理引用的一种叫做“引用计数“ (Reference Count)的操作方式,简单的理解就是系统为每一个创建出来的对象,(这里要注意,只是对象,NSObject的子类,基本类型没有‘引用计数’)

iOS开发ARC内存管理技术要点

本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇文章不是一篇标准的ARC使用教程,并假定读者已经对ARC有了一定了解和使用经验.详细的关于ARC的信息请参见苹果的官方文档与网上的其他教程:) 本文的主要内容: ARC的本质 ARC的开启与关闭 ARC的修饰符 ARC与Block ARC与Toll-Free Bridging 技术交流新QQ群:41

iOS开发:控制器间的数据传递

在iOS开发中遇到的控制器间的数据传递主要有两种情况:顺传递与逆传递.顺传递是指数据的传递方向和控制器的跳转方向相同(如图1):逆传递是指数据的传递方向和控制器的跳转方向相反(如图2).这里分别介绍这两种传递方式的具体做法. 顺传递 如果是用的SB,顺传递较简单,只需在A控制器的prepareForSegue:sender:方法中根据segue参数取得destinationViewController,也就是目标控制器C,直接给控制器C传递数据.从A传来的数据要在C的viewDidLoad方法中

(转)iOS开发ARC内存管理技术要点

转自:http://www.cnblogs.com/flyFreeZn/p/4264220.html 本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇文章不是一篇标准的ARC使用教程,并假定读者已经对ARC有了一定了解和使用经验.详细的关于ARC的信息请参见苹果的官方文档与网上的其他教程:) 本文的主要内容: ARC的本质 ARC的开启与关闭 A

IOS开发--视图控制器和基础视图

一.视图控制器 UIViewController的介绍: UIViewController即视图控制器,它在MVC(Model View Controller)模式中充当控制者的角色,它负责控制视图的显示,以及响应用户在该视图中所有可能的动作.使用视图控制器,我们可以很方便的管理视图及其子视图. UIViewController的生命周期: 运行APP--载入视图loadView--调用viewDidLoad方法--调用viewWillAppear方法--调用viewDidAppear方法--正

iOS开发之控制器创建与加载(生命周期)

1.如何创建一个控制器 控制器常见的创建方式有以下几种: (1)通过storyboard创建 (2)直接创建 MJViewController *mj = [[MJViewController alloc] init]; (3)指定xib文件来创建 MJViewController *mj = [[MJViewController alloc] initWithNibName: @"MJViewController" bundle:nil]; 注意,创建xid后还要设置xid中哪个vi

【IOS开发—视图控制器】

一.UIViewController 视图控制器是UIViewController类或者其子类对象,每个视图控制器都负责管理一个视图层次结构.在UIViewController中有一个重要的UIView属性, 这个view就是这个视图层的根视图,当程序将view作为子视图加入窗口时,也会加入UIViewController对象所管理的整个视图层次结构. 视图控制器只有在将某个视图显示在屏幕上时,相应的视图控制器才会创建其视图,这种延迟加载视图的做法能提高内存的使用效率.视图控制器创建视图的方式有

IOS开发—视图控制器左边缘右滑pop出栈

IOS视图控制器左边缘右滑pop出栈 IOS7.0之后,苹果优化了一个小功能,就是对于UINavagationController堆栈里的UIViewController,只要轻轻在视图控制器的左边缘右滑一下,该视图控制器就会pop出栈(前提当然是对于非根视图控制器而言).实现方法很简单,一句话搞定: self.navigationController.interactivePopGestureRecognizer.enabled = YES; 事实上对于一个视图控制器而言,该属性的默认值即为Y

IOS开发-关于代码管理工具之SVN

最近在做的一个项目,就用到了代码管理工具,那么就对SCN进行了一个简单的了解,即原理和一些常用命令. 那么我们为什么需要使用SVN呢,我们可以吧SVN当成是一个备份服务器,他可以帮你记住每次上传到这个服务器的档案内容,并且自动的赋予每次变更的一个版本. 因为如果是团队开发的话,版本管控是非常重要,你无法保证你手头上的版本永远都是对的,对于团队开发来说,数据同步非常重要,因为互相都需要各自的数据,所以SVN可以帮你解决这个问题. 1.概述 SVN 是集中式源代码管理工具 概念:1> Reposit