UIViewController的使用说明及其生命周期
2016-06-25 21:55
363 查看
UIViewController视图控制器,主要作用:用于控制UI的展现,以及数据model与UI的交互
使用注意事项:
1、controller视图控制器切换方法有两种
1-1、push方法,即 - (void)pushViewController:(UIViewController
*)viewController animated:(BOOL)animated;
使用该方法时,直接将实例化后视图控制器直接进行切换,如:
返回上个视图时,使用方法:
(1)返回当前视图的上一个视图:- (nullable UIViewController *)popViewControllerAnimated:(BOOL)animated;
(2)返回当前视图的前面的指定视图:- (nullable NSArray<__kindof UIViewController *> *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
(3)返回当前视图的根视图,即第一个视图:- (nullable NSArray<__kindof UIViewController *> *)popToRootViewControllerAnimated:(BOOL)animated;
如:
1-2、present方法,即- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^ __nullable)(void))completion;<span style="font-family: Menlo; background-color: rgb(255, 255, 255);"> </span>
使用该方法时,需要将实例化后视图控制器设置成导航控制器的根视图控制器,然后再进行切换,如:
返回上个视图时,使用方法:- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^ __nullable)(void))completion<span style="font-family: Menlo; background-color: rgb(255, 255, 255);"> </span>
如:
2、视图控制器切换后,如果是 push出来的,则下个视图控制器会自动设置其导航栏控制器左按钮,即返回按钮;如果是
present出来的,则下个视图控制器无导航栏控制器左按钮,需要用户自定义;
3、不管是使用push,还是present方法,切换出来的视图控制器,都可以重新设置其导航栏控制器的左按钮,即返回按钮;且必须重新设置对应的返回上层视图的方法;
4、controller的生命周期
4-1、第一个执行的方法,加载UI:- (void)loadView
{ }
4-2、第二个执行的方法,加载UI成功后调用:- (void)viewDidLoad
{ }
4-3、第三个执行方法,UI即将显示时:- (void)viewWillAppear:(BOOL)animated
{ }
4-4、第四个执行方法,UI已经显示时:- (void)viewDidAppear:(BOOL)animated
{ }
4-5、第五个执行方法,UI即将消失时:- (void)viewWillDisappear:(BOOL)animated
{ }
4-6、第六个执行方法,UI已经消失时:- (void)viewDidDisappear:(BOOL)animated
{ }
4-7、最后执行方法,即视图控制器注销方法:- (void)dealloc { }
该方法在接收到内存警告时会调用,且系统会自动处理内存释放:- (void)didReceiveMemoryWarning { }
注意:可在模拟器中模拟内存警告,并调用 didReceiveMemoryWarning方法(模拟器simulator-菜单栏-hardware-simulate
memory warning)
使用注意事项:
1、controller视图控制器切换方法有两种
1-1、push方法,即 - (void)pushViewController:(UIViewController
*)viewController animated:(BOOL)animated;
使用该方法时,直接将实例化后视图控制器直接进行切换,如:
NextUIViewController *vc = [[NextUIViewController alloc] init]; [self.navigationController pushViewController:vc animated:YES];
返回上个视图时,使用方法:
(1)返回当前视图的上一个视图:- (nullable UIViewController *)popViewControllerAnimated:(BOOL)animated;
(2)返回当前视图的前面的指定视图:- (nullable NSArray<__kindof UIViewController *> *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
(3)返回当前视图的根视图,即第一个视图:- (nullable NSArray<__kindof UIViewController *> *)popToRootViewControllerAnimated:(BOOL)animated;
如:
[self.navigationController popViewControllerAnimated:YES];
1-2、present方法,即- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^ __nullable)(void))completion;<span style="font-family: Menlo; background-color: rgb(255, 255, 255);"> </span>
使用该方法时,需要将实例化后视图控制器设置成导航控制器的根视图控制器,然后再进行切换,如:
NextUIViewController *vc = [[NextUIViewController alloc] init]; UINavigationController *navVC = [[UINavigationController alloc] initWithRootViewController:vc]; [self presentViewController:navVC animated:YES completion:NULL];
返回上个视图时,使用方法:- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^ __nullable)(void))completion<span style="font-family: Menlo; background-color: rgb(255, 255, 255);"> </span>
如:
[self dismissViewControllerAnimated:YES completion:nil];
2、视图控制器切换后,如果是 push出来的,则下个视图控制器会自动设置其导航栏控制器左按钮,即返回按钮;如果是
present出来的,则下个视图控制器无导航栏控制器左按钮,需要用户自定义;
3、不管是使用push,还是present方法,切换出来的视图控制器,都可以重新设置其导航栏控制器的左按钮,即返回按钮;且必须重新设置对应的返回上层视图的方法;
4、controller的生命周期
4-1、第一个执行的方法,加载UI:- (void)loadView
{ }
4-2、第二个执行的方法,加载UI成功后调用:- (void)viewDidLoad
{ }
4-3、第三个执行方法,UI即将显示时:- (void)viewWillAppear:(BOOL)animated
{ }
4-4、第四个执行方法,UI已经显示时:- (void)viewDidAppear:(BOOL)animated
{ }
4-5、第五个执行方法,UI即将消失时:- (void)viewWillDisappear:(BOOL)animated
{ }
4-6、第六个执行方法,UI已经消失时:- (void)viewDidDisappear:(BOOL)animated
{ }
4-7、最后执行方法,即视图控制器注销方法:- (void)dealloc { }
该方法在接收到内存警告时会调用,且系统会自动处理内存释放:- (void)didReceiveMemoryWarning { }
注意:可在模拟器中模拟内存警告,并调用 didReceiveMemoryWarning方法(模拟器simulator-菜单栏-hardware-simulate
memory warning)
相关文章推荐
- 记录一些遇到的坑
- soapui笔记7:断言2
- soapui笔记6:断言1
- Android UI根据屏幕分辨率决定加载布局
- map如何按value来排序------用带pair的vector吧
- Android 仿iOS的UISegmentControl标题栏以及内容切换
- UE4打包的exe运行未响应解决方法
- soapui笔记5:项目导入
- REQUEST_URL PHP_SELF SCRIPT_NAME区别
- MUI使用pullRefresh后,scrollToBottom无法使用的解决方案
- RML-怎样的语句会被归纳为同一类型(Unique Batches)
- soapui笔记3:创建一个新的项目
- leetcode 357. Count Numbers with Unique Digits 解题报告
- leetcode 347. Top K Frequent Elements 解题报告
- Instant Run requires 'Tools' | Android | Enable ADB integration' to be enabled
- Design Pattern - Creational Patterns - Builder Pattern
- AlertDialog的自定义
- UEditor 富文本向.net后台传值问题解决方案
- druid 源码分析与学习(含详细监控设计思路的彩蛋)
- DuiLib学习(八)--DuiDesigner的使用