美文网首页导航 tabBar
10-UI进阶(控制器创建和导航控制器)

10-UI进阶(控制器创建和导航控制器)

作者: 木喳喳的夏天 | 来源:发表于2016-03-16 20:07 被阅读41次

UIApplication

  • 整个app中只有一个UIApplication实例,它是单例的

UIApplicationMain的底层实现

  • 根据principalClassName提供类名创建UIApplication对象
  • 创建UIApplicationDelegate对象,并且成为UIApplication对象代理,app.delegate = delegate
  • 开启一个主运行循环,处理事件,可以保持程序一直运行
  • 加载info.plist,并且判断有没有指定main.storyboard,如果指定,就去加载

loadView的作用:自定义控制器的view

  • 调用时间:第一次使用控制器的view的时候调用
  • 注意:在这个方法中如果没有自定义view,就不能获取控制器的view
  • 一旦重写了这个方法,就不要调用[super loadView]
  • 如果重写了这个方法,就不会去加载storyboard描述的控制器的view

控制器view的创建步骤

  • 只有控制器的init方法底层会调用initWithNibName:bundle:
  • 只要通过initWithNibName:bundle:初始化控制器,并且nibName为nil,就会执行以下几步。
  • 寻找有没有跟控制器类名同名但不带Controller的xib,如果有就会去加载
  • 寻找有没有跟控制器类名同名的xib,如果有就会去加载
  • 如果都没有找到,则创建空的view

控制器view的懒加载

  • 创建UIViewController控制器,控制器的view并没有创建
  • 控制器的view懒加载:第一次使用的时候才会去加载,并不是创建UIViewController控制器的时候去加载
  • 如果控制器是窗口的根控制器就可以不用设置尺寸
self.view = [[UIView alloc] initWithFrame:CGRectZero];
  • 在viewDidLoad方法(在控制器的view加载完成的时候调用)中打印控制器的尺寸是不准确的,通常在viewDidApper方法(在view完全显示的时候调用)中打印

导航控制器的简单使用

  • 程序启动完成后调用didFinishLaunchingWithOptions方法中
    // 创建窗口
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    
    // 创建导航控制器的根控制器,也属于导航控制器的子控制器
    UIViewController *vc = [[OneViewController alloc] init];
    vc.view.backgroundColor = [UIColor redColor];
    
    // 导航控制器也需要一个根控制器
    // 默认导航控制器把根控制器的view添加到导航控制器的view上
    UINavigationController *navVc = [[UINavigationController alloc] initWithRootViewController:vc];
    
    // 设置窗口的根控制器
    self.window.rootViewController = navVc;
    
    [self.window makeKeyAndVisible];
  • 跳转第二个控制器
    TwoViewController *vc = [[TwoViewController alloc] init];
    
    vc.view.backgroundColor = [UIColor yellowColor];

    // 跳转
    // 如果导航控制器调用push(进栈),就会把vc添加为导航控制器的子控制器
    [self.navigationController pushViewController:vc animated:YES];
  • 返回上一个控制器
    // pop(出栈)不是马上把控制器销毁,而是等动画完毕以后调用dealloc方法后才进行销毁
    // 回到上一个界面
    [self.navigationController popViewControllerAnimated:YES];
  • 返回到导航控制器的根控制器
    // 注意:只能返回到栈里面的控制器
    [self.navigationController popToViewController:self.navigationController.childViewControllers[0] animated:YES];

    // [self.navigationController popToRootViewControllerAnimated:YES];

相关文章

  • 10-UI进阶(控制器创建和导航控制器)

    UIApplication 整个app中只有一个UIApplication实例,它是单例的 UIApplicati...

  • 学习笔记-导航栏控制器

    导航控制器(UINavigationController) 导航控制器:其功能是导航,而非显示视图 导航控制器的创...

  • iOS导航返回指定控制器

    导航控制器原理: 导航控制器:是一个容器视图控制器,专门用来管理其他的视图控制器,导航控制器管理的视图控制器在导航...

  • 导航控制器

    导航控制器 多控制器的跳转 导航控制器view的结构 导航条y:20H:44 存放栈顶控制器的view 导航控制器...

  • IOS开发 导航控制器切换

    本节学习内容 1.导航控制器视图管理概念 2.导航控制器视图切换的原理 3.导航控制器视图切换应用 导航控制器函数...

  • ios基础总结

    1.导航控制器 1.导航控制器是UIVIewController的子类,导航控制器想当于一个管理控制器的Contr...

  • 导航控制器

    程序一进入时,就要让窗口的跟控制器是一个导航控制器. 1.新建窗口 2.创建导航控制器,并设置导航控制器的跟控制器...

  • nav图文讲解(总结)

    首先是导航控制器下的视图结构 导航控制器的三个区:导航区:导航控制器的navigationBar,管NSArray...

  • UINavigationController ——— 导航控制器

    1、具有管理视图控制器的控制器 2、导航控制器管理具有层次级别的多视图控制器 3、创建导航控制器 ①、创建视图控制...

  • iOS学习之UINavigationController详解

    导航控制器:视图控制器的管理器创建导航控制器必须存在一个跟控制器 在APPdelegate如下: FirstVie...

网友评论

    本文标题:10-UI进阶(控制器创建和导航控制器)

    本文链接:https://www.haomeiwen.com/subject/kziqlttx.html