03-UI进阶(2)

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补充)

  1. 下面这句代码有两个意思[self.window makeKeyAndVisible]
    makeKey的作用是把self.window设置为application的主窗口,可以用application.keyWindow属性查看;Visible的作用是让self.window可见,这里可以用self.window.hidden = YES来达到一样的效果
  2. self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]这句代码会把self.window加到application的windows数组里。常见的窗口有键盘和状态栏。
  3. window有个层级属性,值大的就显示在上面,self.window.windowLevel = UIWindowLevelStatusBar
    UIWindowLevelNormal < UIWindowLevelStatusBar < UIWindowLevelAlert

4. sb创建控制器view(07-LoadView)

  1. LoadView这个方法是用于重写控制器自身的view,比如一个控制器要是要用webView加载纯网页就可以重写这个方法,就不用self.view add了
  2. 重写的时候千万不要调用[super loadView],否则就是在做无用功,而且如果重写了这个方法,就不会去加载storyboard(xib)描述的控制器的View
  3. 在这里方法里重写时必须先初始化self.view,像这样self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];,而如果像这样self.view.backgroundColor = [UIColor redColor];上来就直接调用它的get方法会进入死循环(get方法又进入loadView方法
  4. loadView什么时候调用:第一次使用控制器的view的时候调用

5. 创建控制器view的完整版(09-控制器view的创建(xib))

03-UI进阶(2)_第1张图片
  • 步骤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文件

你可能感兴趣的:(03-UI进阶(2))