美文网首页
iOS-UIViewController 视图控制器 传值

iOS-UIViewController 视图控制器 传值

作者: 我是谁重要吗 | 来源:发表于2018-03-21 21:42 被阅读70次

解释:

UIViewController 视图控制器 ,是其他控制器的父类,可以添加子控制器嵌套使用。
属于MVC设计模式中得C,获取M数据,把数据传到V上面。
管理内部(整个屏幕)各个view的加载显示和卸载,同时负责与其他ViewController的通信和协调。

分类:

一类主要用于展示内容:
比如UIViewController、UITableViewController等,同时还可以自定义继承自UIViewController的ViewController;
另一类是ViewController容器:
UINavigationController和UITabBarController等,UINavigationController是以Stack的形式来存储和管理ViewController的,UITabBarController是以Array的形式来管理ViewController的。
不管是哪类ViewController,都继承自UIViewController

创建方式:

1 代码
2 xib
3 stroyBoard

关联:

通常通过 UINavigationController配合来切换页面。

设置根控制器:

//在 AppDelegate.m 中写入:
ViewController1* vc = [[ViewController1 alloc] init];
    //导航控制器
    UINavigationController* nc = [[UINavigationController alloc] initWithRootViewController:vc];
    self.window.rootViewController = nc; //根控制器
    
//程序自动显示ViewController1文件显示的内容。

控制器跳转/切换、返回:

//在  ViewController1 的事件中写入:
    ViewController2* vc2 = [[ViewController2 alloc] init];
    [self.navigationController pushViewController:vc2 animated:YES];//(入栈)
//事件执行时 自动转到ViewController2文件中。

//返回上一级controller
popViewControllerAnimated: // (出栈)
//返回根controller
popToRootViewControllerAnimated:

两个页面传值:

//1 可以利用NSUserDefaults。
//2 实例化一个页面直接给他的属性赋值:
ViewController2* vc2 = [[ViewController2 alloc] init];
    vc2.vc1 = self;//这个要在2中声明1是一个类 @class ViewController1; 设置成员变量,就可以在2中赋值1
    vc2.view.backgroundColor = [UIColor purpleColor];
    vc2.str = @"MC";

生命周期、加载过程:

load->initialize->init(initWithNibName)—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper—>viewWillDisapper—>viewDidDisapper—>viewWillUnload->viewDidUnload—>dealloc
其中viewWillUnload跟viewDidUnLoad 在iOS6以后就过期了.
LoadView: 控制器调用loadView方法创建控制器的view.当控制器的view存在了就不会调用.
不要再LoadView中调用[super loadView],会影响CPU性能
dealloc: 视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放
在这个方法内,我们通常会把添加在控制器内的一些东西给移出.例如:KVO监听者,HUD,定时器等

//视图已经加载 做一些控件的初始化操作,比如给控件设置尺寸位置,只在加载的时候调用一次
- (void)viewDidLoad

//视图将要出现的时候
- (void)viewWillAppear:(BOOL)animated

//视图已经出现的时候会调用
- (void)viewDidAppear:(BOOL)animated

//视图将要消失的时候调用
- (void)viewWillDisappear:(BOOL)animated

//视图已经消失的时候调用
- (void)viewDidDisappear:(BOOL)animated

//控件改变位置时调用,多用于横竖屏切换。UIScrollView滚动也会触发
- (void)viewWillLayoutSubviews
- (void)viewDidLayoutSubviews

//在内存不够的情况下调用 收到low-memory时系统不会释放view,而只是释放controller的resource。
-(void)didReceiveMemoryWarning 

设置title:

UIViewController *vc;
vc.title = title;  // 相当于同时设置了tabBarItem.title和navigationItem.title
vc.tabBarItem.title = title;  // tabBar标签上显示的文字
vc.navigationItem.title = title;  // 导航栏上显示的文字
vc.hidesBottomBarWhenPushed = YES;  
// 当该控件器被push显示出来的时候,自动隐藏底部tabBar;

跳转页面卡顿解决:

//把当前控制器背景颜色设为目标控制器颜色。

vc.view.backgroundColor = [UIColor redColor];

注意事项1:

//不应该这样用!!
viewController.view.bounds = CGRectMake(50, 50, 100, 200);
[viewController.view addSubview:someOtherViewController.view];

Each custom view controller object you create is responsible for managing all of the views in a single view hierarchy. In iPhone applications, the views in a view hierarchy traditionally cover the entire screen, but in iPad applications they may cover only a portion of the screen. The one-to-one correspondence between a view controller and the views in its view hierarchy is the key design consideration. You should not use multiple custom view controllers to manage different portions of the same view hierarchy. Similarly, you should not use a single custom view controller object to manage multiple screens worth of content.
一个ViewController应该且只应该管理一个view hierarchy,而通常来说一个完整的view hierarchy指的是整整占满的一个屏幕。而很多app满屏中会有各个区域分管不同的功能,一些开发者喜欢直接新建一个ViewController和一套相应的View来完成所要的功能(比如我自己=_=)。虽然十分方便,但是却面临很多风险..

最后附图:

view的加载过程:

view的加载过程.png

内存警告系统执行步骤:

内存警告系统执行步骤.png

相关文章

  • iOS-UIViewController 视图控制器 传值

    解释: UIViewController 视图控制器 ,是其他控制器的父类,可以添加子控制器嵌套使用。属于MVC设...

  • 《iOS 移动开发》读书笔记_第六章视图控制器UIViewCon

    以模态方式弹出视图控制器并传值实例:书第136-139页 视图控制器的生命周期_创建:alloc 视图控制器的生命...

  • UI基础篇-UIViewController

    1.创建UIViewController 2.视图控制器的生命周期 3.模态视图跳转 4.视图控制器之间的正向传值...

  • 反向传值

    反向传值 反向传值有三种方式,分别是闭包、消息中心、单例从后一个视图控制器把值传给前一个视图控制器 闭包 消息中心 单列

  • iOS-个人整理13 - 界面间传值:属性传值---代理传值--

    一、属性传值 从前向后 假设A为第一个视图控制器,B为第二个视图控制器在A中导入B的.h文件场景:A向B传值第一步...

  • 页面传值

    一、属性传值从前向后 假设A为第一个视图控制器,B为第二个视图控制器在A中导入B的.h文件场景:A向B传值第一步:...

  • 常用的传值方法

    1.属性传值(正向) 这样就是正向的属性传值 2.block传值(反向) 思路: 1.首先,创建两个视图控制器,在...

  • 反向传值

    反向传值   在开发中我们经常会遇到将当前视图控制中的某些值传到另一个视图控制器,下面将介绍常用的几种反向传值的方...

  • iOS - 页面之间几个常用的传值方式

    什么是页面传值??页面传值:既不同视图控制器之间数据传递的过程页面传值描述:页面一:有两个控件分别是展示label...

  • 一篇文章学会页面传值的10种方法(上)

    1、最简单AB面正向传值 效果如下: 最简单的正向传值.gif 首先我们先创建两个视图控制器ViewControl...

网友评论

      本文标题:iOS-UIViewController 视图控制器 传值

      本文链接:https://www.haomeiwen.com/subject/jbbnqftx.html