一、关于这个手动创建Window呢,给大家说完了 1.但是呢,要给大家补充一个东西, 有时候,有的框架,可能会用到什么东西呢,我写到下面: [UIApplication sharedApplication] 什么东西,是不是应用程序对象, 然后呢,keyWindow 是不是拿到它的主窗口, 然后呢,add什么东西, [UIApplication sharedApplication].keyWindow addSubview: 然后,加了一个它自定义的一个什么Window啊,customWindow [[UIApplication sharedApplication].keyWindow addSubview:customWindow]; 然后呢,加进去以后,跑了半天,一点儿效果都没有, 那提示大家,这种情况,你怎么解决呢, 就不要去用这种方式去加了啊, 就把它改一下,就行了, [UIApplication sharedApplication] 它是不是有一个什么属性: windows属性: 然后呢,你给它拿个lastObject [[UIApplication sharedApplication].windows lastObject]; 把它加到最后一个窗口, 然后呢,再去addSubview, [[[UIApplication sharedApplication].windows lastObject] addSubview:customWindow]; 把这个customWindow加进去,了解一下啊,这个, 这个不需要大家掌握的,以后你在写的时候,如果别人的有些东西你显示不出来,有个印象就行了, 知道怎么去解决, 好吧,那我们把这个就关了, 然后,接下来,给大家介绍一下下面一个东西, 二、关于我们这个“三种加载控制器的方式“ 1.那,现在我们学的都是哪些加载控制器, 1)现在大家了解的,是不是有一个storyboard, 2)还有一个,就是我们刚刚演示的,加载自定义控制器的时候,直接自定义了一个控制器,那种方式,相当于一个纯代码的方式, 明白吧,因为我们没有storyboard, 也没有其他的东西, 2.那接下来呢,要给大家介绍的,三种创建控制器的方式, 1)第一种,就是纯代码,这个是不是跟我们刚才那个重复了,所以我们待会儿就直接快一点儿给它过去,就行了, 2)第二种,就是通过storyboard,创建控制器,那前面的时候,我们一直在用,知道它是通过storyboard加载,但是呢,我们并不知道怎么去加载,对吧,那你手动去实现一下,那就理解了, 3)第三种,就是通过xib创建控制器 这个xib,我们是不是常见, 但是,没有用,对吧, 那接下来呢,我们就来给大家看一下这三种方式加载控制器,怎么去用 三、纯代码方式加载控制器 1.那首先呢,我先新建一个项目, 新建一个项目, 给它来个Name, - 3种加载自定义控制器的方式 我们点Next,看一下这是第几份代码, 是不是05了, 05 - 3种加载自定义控制器的方式, 然后呢, 首先,我们加载自定义控制器,三种加载控制器的方式, 那我呢,还是,一样的,我把系统的这些先给它删了, 自己来实现, 选中这三个:ViewController.h、ViewController.m、Main.storyboard 选中这三个,删掉, Delete, Move to Trash, 2.删完之后,还得干嘛, 是不是把info.plist,Main,改掉, 但是呢,你在这个项目这个Target,里面这个General, 看到没有,这个General显示蓝色的时候,意味着它选中了, 这里面有一个Main Interface, 在这儿呢,Delete,然后,回来, 看info.plist里面, 是不是也就没有了, 而且那个Main storyboard file base name,都没了, 所以呢,这种方式也可以的啊, 然后呢,我们就,把三种加载自定义控制器的方式,都来一遍, 1)第一种:通过代码去创建控制器 2)第二种:通过storyboard去创建控制器 3)第三种:通过xib去创建控制器 建三个文件夹,分门别类的去存放代码, 1)Code 2)Storyboard 3)xib 那,首先,加载自定义控制器, 还是,我们先把前面坑给它先挖好, 1)第一步:先创建Window 2)第二步:设置窗口的根控制器,然后呢,你得加载,对吧 3)第三步:将窗口作为主窗口并可见 好,我们再写一遍啊,后面就直接用了, 好,那我把这个1、3、先写了, 1)创建window self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window = 等于什么,是不是UIWindow alloc,直接让它等于屏幕的大小吧,[UIScreen mainScreen].bounds 3)将窗口作为主窗口并可见 [self.window makeKeyAndVisible]; 让这个self.window,makeKeyAndVisible, 2)设置窗口的根控制器 然后这步呢,就是加载控制器,设置它的根控制器, 哦,这里写错了,makeKeyAndVisible,对吧, makeKeyAndVisible, 然后,如果这么写,makeKeyWindow,是不是得加一个hidden = NO [self.window makeKeyAndVisible]; makeKeyAndVisible, 然后呢,接下来,是不是把self.window.rootViewController,要指定一下, self.window.rootViewController = ? 但是呢,现在我们没有控制器 //self.window.rootViewController = ? 现在,我们没有控制器,对不对,那,怎么办呢, 1)首先,第一种方式,Code,已经演示过了,自定义控制器,现在还记得吗,是不是Command + N, 现在,不用UIViewController,了啊, 我用UITableViewController, 给大家演示一下, 是不是这里选择Cocoa Touch Class, 点Next,继承自UITableViewController 继承自UITableViewController Name:HMTableViewController 点Next, 点Next, 那,现在是不是这个代码就有了, 它的类,这是实际上就是一个控制器类, 然后呢,再回到AppDelegate.m,文件中, AppDelegate, 然后,在第10行代码呢,我给它加一个导入头文件, #import “HMTableViewController.h“ 对吧, 这种方式呢,就相当于通过纯代码创建控制器, 怎么创建, HMTableViewController *tableVc = [[HMTableViewController alloc] init]; 然后呢,把它指定为我们窗口的根控制器, self.window.rootViewController = tableVc; 模拟器换成iPhone6S, command + R, 那我们稍等一下啊,把它运行起来,现在它显示