iOS应用程序之控制器管理

  • 控制器以及view的多种创建方式
  • UINavigationController的简单使用:添加\移除子控制器
  • UINavigationBar内容的设置
  • 控制器的生命周期方法

一、控制器以及view的多种创建方式

1??控制器的创建方式

-直接创建

ViewController *test = [[ViewController alloc] init];

-指定xib文件来创建

ViewController *test = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

-通过storyboard创建

先加载storyboard文件(Test是storyboard的文件名)
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Test" bundle:nil];
•接着初始化storyboard中的控制器
初始化“初始控制器”(箭头所指的控制器)
ViewController *test = [storyboard instantiateInitialViewController];
通过一个标识初始化对应的控制器
ViewController *mj = [storyboard instantiateViewControllerWithIdentifier:@”test"];

2??View加载的方式(MJ老师的一个图就明白了)

•控制器的view是延迟加载的:用到时再加载
•可以用isViewLoaded方法判断一个UIViewController的view是否已经被加载
•控制器的view加载完毕就会调用viewDidLoad方法

二、UINavigationController的简单使用:添加\移除子控制器

1??利用UINavigationController,可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型例子就是系统自带的“设置”应用
2??UINavigationController的使用步骤
-初始化UINavigationController
-设置UIWindow的rootViewController为UINavigationController
-根据具体情况,通过push方法添加对应个数的子控制器

三、UINavigationBar内容的设置
•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;

改变内容

//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;

四、ViewController的生命周期

tep1:initWithNib             viewController 会进行alloc,并init.

step2: loadView               在这里会看它的子类是否有重写这个函数,如果重写了则调用子类的,否则就调用她自己的。注意,这个时候视图还是没有没加载进来的哦。

step3:viewDidLoad         这个时候视图已经存在了。可以在这里添加你想要添加的UI控件了。

step4:viewWillAppear     视图将出现在屏幕上了

step5:viewDidAppear       视图已经成功在屏幕上渲染完成了

step6:viewWillDisappear   视图将要消失了

step7:viewDidDisappear   视图从屏幕上消失了

step8:viewDidUnLoad       当发生内存警告的时候,如果本视图不是当前正在显示的视图,则会执行这个函数。将子视图释放。

step9:dealloc                   释放viewController

而view的生命周期则是step3_step8.

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。