本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末
如果觉得本文内容过长,请前往本人 “简书
 
 
 
控制器 :

 
  • 一个iOS的app很少只由一个控制器组成,除非这个app极其简单
  • 当app中有多个控制器的时候,我们就需要对这些控制器进行管理
  • 有多个view时,可以用一个大的view去管理1个或者多个小view,控制器也是如此,用1个控制器去管理其他多个控制器
  • 比如,用一个控制器A去管理3个控制器B、C、D,控制器A被称为控制器B、C、D的“父控制器”,控制器B、C、D的被称为控制器A的“子控制器”
 
 
UIViewController的创建:

 
1.直接代码创建(alloc+init)
2.通过 Xib 文件创建
3.通过 storyboard 创建
 
 
1.1.1 控制器的创建 - alloc+init

步骤:
 
AppDelegate.m

 #import "AppDelegate.h"
#import "TDViewController.h" @interfaceAppDelegate ()
@end @implementation AppDelegate //应用程序启动完成,调用此方法;如果因为内存等原因,应用程序被操作系统干掉,再次点击图标,会调用此方法!
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 1. 实例化UIWindow(特殊的UIView)
self.window = [[UIWindowalloc] initWithFrame:[UIScreenmainScreen].bounds]; // 2.alloc init 方法( 实例化视图控制器)
TDViewController *vc = [[TDViewControlleralloc] init]; self.window.rootViewController = vc; // 设置根控制器(把视图控制器添加到window窗口的根视图上)
[self.windowmakeKeyAndVisible]; // 让窗口变成主窗口并且可见 returnYES;
}
……………
创建一个控制器:TDViewController,继承自 UIViewController
 
TDViewController.m

 #import "TDViewController.h"

 @interfaceTDViewController ()
@end @implementation TDViewController - (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view.
NSLog(@"你加载的是 TDViewController");
}
……………
打印输出:
2016-01-19 18:44:11.706 UIViewController(alloc+init)[2653:418332] 你加载的是 TDViewController
 
 
 
1.1.2 控制器的创建 - Xib

关于报错:
报错:'-[UIViewController _loadViewFromNibNamed:bundle:] was unable to load a nib named “TDView"'
解决:拖一个view
报错:'-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "TDView" nib but the view outlet was not set.'
解决: 在xib 的 File‘s Ower上,绑定class到TDViewController,再右键View连线
 
步骤:

创建一个TDView.xib
 
AppDelegate.m
 #import "AppDelegate.h"
#import "TDViewController.h" @interfaceAppDelegate ()
@end @implementation AppDelegate //应用程序启动完成,调用此方法;如果因为内存等原因,应用程序被操作系统干掉,再次点击图标,会调用此方法!
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 1.实例化UIWindow(特殊的UIView)
self.window = [[UIWindowalloc] initWithFrame:[UIScreenmainScreen].bounds]; // 2. 加载指定的xib文件
TDViewController *vc =
[[TDViewControlleralloc] initWithNibName:@"TDView"bundle:nil]; self.window.rootViewController = vc; // 设置根控制器(把视图控制器添加到window窗口的根视图上)
[self.windowmakeKeyAndVisible]; // 让窗口变成主窗口并且可见 returnYES;
}
……………
创建一个控制器:TDViewController,继承自 UIViewController 
 
TDViewController.m

 #import "TDViewController.h"

 @interfaceTDViewController ()
@end @implementation TDViewController - (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view.
NSLog(@"你加载的是 TDViewController");
}
……………
 
打印输出: 
2016-01-19 19:08:43.400 UIViewController(Xib)[3121:549327] 你加载的是 TDViewController
 
 
 
1.1.3 控制器的创建 - sb

 
步骤:

创建一个TD.storyboard
 
AppDelegate.m

 #import "AppDelegate.h"
#import "TDViewController.h" @interfaceAppDelegate ()
@end @implementation AppDelegate //应用程序启动完成,调用此方法;如果因为内存等原因,应用程序被操作系统干掉,再次点击图标,会调用此方法!
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 1.实例化UIWindow(特殊的UIView)
self.window = [[UIWindowalloc] initWithFrame:[UIScreenmainScreen].bounds]; // 2. 先加载sb文件(sb 里面的 Class 要指向要创建的控制器的类名)(bundle 传nil 默认就是main bundle)
UIStoryboard *sb = [UIStoryboardstoryboardWithName:@"TD"bundle:nil]; // 3.接着初始化storyboard中的控制器
// 方法1:初始化“初始控制器”(sb中箭头所指的控制器)<通过加载sb文件来创建控制器的视图,即视图控制器>
TDViewController *vc = [sb instantiateInitialViewController]; // 方法2:通过一个标识,初始化对应的控制器(需要在sb上的控制器设置 Storyboard ID)
TDViewController *vc = [sb instantiateViewControllerWithIdentifier:@"TD"]; self.window.rootViewController = vc; // 设置根控制器(把视图控制器添加到window窗口的根视图上)
[self.windowmakeKeyAndVisible]; // 让窗口变成主窗口并且可见 returnYES;
}
……………
 创建一个控制器:TDViewController,继承自 UIViewController
 
 
TDViewController.m

 #import "TDViewController.h"

 @interfaceTDViewController ()
@end @implementation TDViewController - (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view.
NSLog(@"你加载的是 TDViewController");
}
……………
打印输出:
2016-01-19 19:19:53.029 UIViewController(storyboard)[3381:616265] 你加载的是 TDViewController
 
 
 
 Demo 下载:

https://yunpan.cn/crcML8JCvLjsV (提取码:1fdc)
 
 
 
 
如果你觉得本篇文章对你有所帮助,请点击右下部“推荐”,^_^
 
 
作者:蓝田(Loto)
出处:http://www.cnblogs.com/shorfng/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
 

如有疑问,请发送邮件至 shorfng@126.com 联系我。
 
By:蓝田(Loto)
 
 
 
 
 
 
 

1.0 多控制器管理(附:Demo)的更多相关文章

  1. 基于ZKWeb + Angular 4.0的开源管理后台Demo

    这是一套基于ZKWeb网页框架和Angular 4.0编写的开源管理后台Demo,实现了前后端分离和模块化开发, 地址是: https://github.com/zkweb-framework/ZKW ...

  2. FMDB的使用方法(附Demo)

    http://www.jianshu.com/p/54e74ce87404 最近在项目中需要在多个页面对同样的数据进行相关操作,于是便用到了FMDB数据库操作,以下便是FMDB的一些简单的使用方法.附 ...

  3. Asp.net MVC集成Google Calendar API(附Demo源码)

    Asp.net MVC集成Google Calendar API(附Demo源码) Google Calendar是非常方便的日程管理应用,很多人都非常熟悉.Google的应用在国内不稳定,但是在国外 ...

  4. C#开发微信公众平台-就这么简单(附Demo)转载

    C#开发微信公众平台-就这么简单(附Demo)  来源:https://www.cnblogs.com/xishuai/p/3625859.html#!comments 写在前面 阅读目录: 服务号和 ...

  5. Linux 部署ASP.NET SQLite 应用 的坎坷之旅 附demo及源码

    Linux 部署ASP.NET SQLite 应用 的坎坷之旅.文章底部 附示例代码. 有一台闲置的Linux VPS,尝试着部署一下.NET 程序,结果就踏上了坑之路,不过最后算是完美解决问题,遂记 ...

  6. 【转】IOS AutoLayout详解(三)用代码实现(附Demo下载)

    转载自:blog.csdn.net/hello_hwc IOS SDK详解 前言: 在开发的过程中,有时候创建View没办法通过Storyboard来进行,又需要AutoLayout,这时候用代码创建 ...

  7. winserver的consul部署实践与.net core客户端使用(附demo源码)

    winserver的consul部署实践与.net core客户端使用(附demo源码)   前言 随着微服务兴起,服务的管理显得极其重要.都知道微服务就是”拆“,把臃肿的单块应用,拆分成多个轻量级的 ...

  8. C#版清晰易懂TCP通信原理解析(附demo)

    [转] C#版清晰易懂TCP通信原理解析(附demo) (点击上方蓝字,可快速关注我们) 来源:周见智 cnblogs.com/xiaozhi_5638/p/4244797.html 对.NET中网络 ...

  9. 微信公众号开发系统入门教程(公众号注册、开发环境搭建、access_token管理、Demo实现、natapp外网穿透)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/a1786223749/article/ ...

随机推荐

  1. 【转载】Java反射: 数组

    原创链接:http://czj4451.iteye.com/blog/1479486 java.lang.reflect.Array Java反射机制通过Array类来处理数组,结合java.lang ...

  2. 烂泥:nginx、php-fpm、mysql用户权限解析

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ilanni.blog.51cto.com/526870/1561097 本文首发 ...

  3. 小白搭建一个网站(DouPHP)

    1)安装phpStudy_2014_setup.1413444920.exe 并启动数据库 2)将软件自带的WWW实例替换成我发的这个模板(DouPHP),网上也可以下载. 能找到更好模板的也可以不用 ...

  4. Protecting against XML Entity Expansion attacks

    https://blogs.msdn.microsoft.com/tomholl/2009/05/21/protecting-against-xml-entity-expansion-attacks/ ...

  5. 深入理解javascript原型和闭包(9)——简述【执行上下文】下

    继续上一篇文章(http://www.cnblogs.com/wangfupeng1988/p/3986420.html)的内容. 上一篇我们讲到在全局环境下的代码段中,执行上下文环境中有如何数据: ...

  6. postgresql:pgadmin函数调试工具安装过程

    通过安装第三方插件pldebugger,可实现在pgadmin客户端对函数设置断点.调试,具体过程如下: 1.下载pldebugger安装包:http://git.postgresql.org/git ...

  7. 10W -python

    计算2 3 4 加运算符 小于30 >>> new=[''.join(('2',op,'3')) for op in ops] >>> print(new) ['2 ...

  8. Silicon C8051F340之时钟系统

    一.背景 做个记录,以备下次快速开发. 二.正文 C8051F340有一个可编程内部高频振荡器.一个可编程内部低频振荡器.一个外部振荡器驱动电路 和一个4倍时钟乘法器.其中可编程内部高频振荡器在系统复 ...

  9. CSS书写规范、命名规范、网易CSS框架NEC

    网易CSS框架NEC:http://nec.netease.com/ NEC框架的CSS规范:  CSS规范 - 分类方法 CSS规范 - 命名规则 CSS规范 - 代码格式 CSS规范 - 优化方案 ...

  10. PHP判断文件或者目录是否可写

    在PHP中,可用is_writable()函数来判断一个 文件/目录 是否可写,详情如下: 参考 is_writable (PHP 4, PHP 5) is_writable — 判断给定的文件名是否 ...