MVC设计模式

  • iOS中的架构基石

MVC.png

iOS中的视图UIView

  • 最基础的视图类,管理屏幕上一定区域的内容展示
  • 作为各种视图类型的父类,提供基础的能力
  • 外观、渲染、动画
  • 相应区域内的事件
  • 布局和管理子视图

    布局

  • 设置大小、位置统称frame

  • addSubView

    使用栈管理全部的subView

  • 位置重叠的展示最后入栈的

  • 可以随时调整位置
  • 可以插入到指定位置

    UIView的生命周期

  • init

  • willMoveToSuperview
  • didMoveToSuperview
  • willMoveToWindow
  • didMoveToWindow

    UIViewController

  • 视图控制器,管理视图View的层级结构

  • 自身包含View即DefaultView,可以理解为一个容器
    • 管理View的生命周期
    • 响应用户操作
    • 视图的切换
    • 作为一个容器管理和多个Controller的交互和动画
  • ViewController的生命周期

    • init
    • viewDidLoad
    • viewWillAppear
    • viewDidAppear
    • viewWillDisappear
    • viewDidDisappear
    • Dealloc

      结合View和VC构建TabBar页面

      基础

  • UIView负责页面内容呈现

  • 使用基础的VC管理多个View
  • VC在管理View的同时,也负责不同View的切换

    常用App页面结构分析

  • 单页面展示

    • 通过列表展示简介
    • 通过较长滚动页面展示内容
  • 多页面管理

    • 4/5个底部按钮
    • 通过Push 的方式进行页面切换(页面栈)

      UITabBarController

  • 管理多个VC的切换

  • UITabBarController.png
  • UITabBar.png

    使用Navigation构建App的基础交互

    UINavigationController

  • 通过栈管理页面间的跳转

  • 通常只展示栈顶页面
  • Push/Pop操作
  • 通过UINavigationBar响应操作,处理VC的切换
  • NavigationController.png
  • UINavigationBar.png

    UINavigationBar

  • UINavigationController管理

  • 顶部UIViewController变化,UINavigationBar则同步变化

UINavigationBar.png

实现自己的Navigation

  • 使用系统函数实现
  • 相关开源框架和项目

    • WRNavigationBar
    • KMNavigationBarTransition
    • RTRootNavigationController

      iOS基本页面框架的构成和实现

      MVC

      MVC.png

      UIWindow

  • 特殊形式的UIView,提供App中展示内容的基础窗口

  • 只作为容器,和ViewController一起协同工作
  • 通常屏幕上只存在、展示一个UIWindow
  • 创建方式

    • storyboard自动创建
    • 手动创建
      • 创建UIWindow并设置大小
      • 设置rootViewController
      • makeKeyAndVisible

        RootVC两种实现

  • TabBarController

RootTabBarController.png

  • NavigationController

RootNavigationController.png

Delegate设计模式

UITabBarController

  • 设计者
    • 提供一些使用者可以自定义的操作
    • @optioanl/@required注解
    • 提供@property 即 delegate,打通连接
    • 在对应的时机,让delegate执行对应方法
  • UITabBarController.png
  • 使用者
    • 设置delegate为self
    • 按需实现方法
  • 使用Delegate.png