0610-控制器创建导航控制器
1. 一个IOS程序启动步骤(04-uiwindow)
- 第一步加载main.m文件
- 创建UIApplication
- 创建UIApplicationDelegate,并且成为UIApplication代理
- 开启主运行循环,保持程序一直在运行
- 加载info.plist,判断有没有指定main.stroyboard,指定了就加载(这里判断的方法就是看General→DeploymentInfo→MainInterface有没有指定)
- 第二步加载main.stroyboard(如果有的话),如果没有就用代码实现
- 创建窗口
- 加载main.storyboard,并且加载main.storyboard指定的控制器
- 把新创建的控制器作为窗口的根控制器,让窗口显示出来
2. 区别(04-uiwindow)
self.window.rootViewController = vc;
[self.window addSubview:vc.view];
这两句的区别是前者会默认就有旋转功能
3. 关于window的若干说明(05-uiwindow补充)
- 下面这句代码有两个意思
[self.window makeKeyAndVisible]
makeKey的作用是把self.window设置为application的主窗口,可以用application.keyWindow属性查看;Visible的作用是让self.window可见,这里可以用self.window.hidden = YES
来达到一样的效果 -
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]
这句代码会把self.window加到application的windows数组里。常见的窗口有键盘和状态栏。 - window有个层级属性,值大的就显示在上面,
self.window.windowLevel = UIWindowLevelStatusBar
UIWindowLevelNormal < UIWindowLevelStatusBar < UIWindowLevelAlert
4. sb创建控制器view(07-LoadView)
- LoadView这个方法是用于重写控制器自身的view,比如一个控制器要是要用webView加载纯网页就可以重写这个方法,就不用self.view add了
- 重写的时候千万不要调用
[super loadView]
,否则就是在做无用功,而且如果重写了这个方法,就不会去加载storyboard(xib)描述的控制器的View - 在这里方法里重写时必须先初始化self.view,像这样
self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
,而如果像这样self.view.backgroundColor = [UIColor redColor];
上来就直接调用它的get方法会进入死循环(get方法又进入loadView方法 - loadView什么时候调用:第一次使用控制器的view的时候调用
5. 创建控制器view的完整版(09-控制器view的创建(xib))

- 步骤1:是否重写了loadView
- 步骤2:是否有sb文件
- 步骤3:initWithNibName后面这个参数的xib文件是否存在
- 步骤4:initWithNibName后面为nil时,MJView.xib是否存在
- 步骤5:initWithNibName后面为nil时,MJViewController.xib是否存在
- 步骤6:以上都不存在创建一个空的view
注意:只有控制器的init方法底层会调用initWithNibName:bundle:,所以用xib创建控制器的view时可以用init,但是用xib创建自定义控制的view则必须用initWithNibName:方法
6. 控制器view默认是clearColor(10-默认控制器view的颜色)
clearColor也是一种Color,且alpha默认为1,所以此时虽然看上去是透明的但是并不能穿过改view去点击下面的控件
7. 当控制器view的frame发生改变时,在viewDidLoad方法里打印此控制器的view的frame是不准确的,应该在viewWillAppear或者DidAppear里调用(11-控制器view懒加载)
8. 快捷键(14-导航控制器出栈)
在IB界面选中一个控件,同时按下option+command+return可以快速定位到该IB文件的m文件
网友评论