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

 
  • 一个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都有什么进阶技术

    Java都有什么进阶技术?   看到有人给题主推荐<代码整洁之道>,评论有人说那不是JAVA进阶的书- 私以为,一些人对JAVA进阶的理解片面了,JAVA不过也是一门语言,提升和进阶还是内 ...

  2. zabbix3.0.4 邮件告警详细配置

    sendEmail是一个轻量级,命令行的SMTP邮件客户端.如果你需要使用命令行发送邮件,那么sendEmail是非常完美的选择:使用简单并且功能强大.这个被设计用在php.bash perl和web ...

  3. Spring系列之谈谈对Spring IOC的理解

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IOC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...

  4. Asp.net实现直接在浏览器预览Word、Excel、PDF、Txt文件(附源码)

    功能说明 输入文件路径,在浏览器输出文件预览信息,经测试极速(Chrome).IE9.Firefox通过 分类文件及代码说明  DemoFiles 存放可测试文件 Default.aspx  启动页 ...

  5. javascript数据结构与算法--高级排序算法

    javascript数据结构与算法--高级排序算法 高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法-- ...

  6. Excel—身份证生日提取

    一.只有18位的身份证号码 如: 身份证号 330682199302264000 41120019890823729X 231081199002256839 131101198203154666 36 ...

  7. TypePerf.exe使用命令查找计数器

    TypePerf.exe是一个命令行工具,包括把Windows操作系统的性能计数器数据输出到命令窗口或写入到支持该功能的日志文件格式中. 通过以下两个参数获取计数器信息: -q [object] 列出 ...

  8. PHP常量、变量作用域详解(一)

    PHP 中的每个变量都有一个针对它的作用域,它是指可以在其中访问变量(从而访问它的值)的一个领域.对于初学者来说,变量的作用域是它们所驻留的页面.因此, 如果你定义了 $var,页面余下部分就可以访问 ...

  9. ubuntu配置 Java SE 1.6

    今天编译android 4.0时提示如下错误:   You are attempting to build with the incorrect version of java. Your versi ...

  10. Android-做个性化的进度条

    1.案例效果图 2.准备素材                                progress1.png(78*78)              progress2.png(78*78) ...