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

 
  • 一个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. Nginx下wordpress伪静态规则(rewrite)

    当我们从apache服务器转向Nginx服务器的时候,它们的伪静态规则就不一样了,所以你熟悉Nginx服务器的伪静态规则,自己写当然也好.但很多网友还是不太了解Nginx服务器的伪静态规则的,而如果你 ...

  2. Ubuntu一路填坑...

    1.安装 从ubuntu9.0开始,一路更新,越来越垃圾,更可恶的是工作上经常指定特定的版本,于是乎,我电脑里装了n个版本的ubuntu. Win7 + Ubuntu 15.10 1)装完win7之后 ...

  3. strace追踪未开始或者来不及捕获pid的进程(译)

    我的个人博客网站最近被攻击了,被用来发送一些垃圾邮件.但是我不知道这个进程是怎么来的,用top查看发现一个不知道干什么的perl脚本,决定给用strace查看一下. strace可以追踪一个进程的系统 ...

  4. 关于Visual Studio 2015中没有报表项(ReportViewer)的解决方案。

    没有报表,一般默认安装之后会出现这种情况,在安装的时候选择自定义安装,把Microsoft Office 开发人员工具.Microsoft SQL Server Data Tools勾选上,安装之后就 ...

  5. 群里分享的react的收藏一下!今日周末,改了个表单验证然后无所事事了!

    今日周末,改了个表单验证然后无所事事了,然后把昨天群里分享的react的收藏一下尽管现在还在研究angular和nodeJs毕竟刚刚开始用有点不熟...没准以后会研究一下react毕竟看着下面这张图还 ...

  6. centos安装PHP服务器步骤

    方法一.使用网友开发的EZHTTP程序包一键安装. 可以参考地址http://www.centos.bz/2013/08/ezhttp-tutorial/ http://www.cnblogs.com ...

  7. PHP面向对象(OOP)编程入门教程

    面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行PHP的高级编程,对于提高 PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们就 ...

  8. 关于int,integer初始值问题

  9. IDA插件栈字符串识别插件

    该插件是一款可以自动识别栈上局部变量为字符串的插件,字符串形式如下,并自动的加上注释                                       如图:可以自动识别栈上的字符串 项目主 ...

  10. Func与Action

    平时我们如果要用到委托一般都是先声明一个委托类型,比如: private delegate string Say(); string说明适用于这个委托的方法的返回类型是string类型,委托名Say后 ...