viewController

1.UIViewController生命周期几种方法调用时机

  1. - (id)initWithNibName:(NSString )nibNameOrNil bundle:(NSBundle )nibBundleOrNil;
    当UIViewController在初始化加载xib文件时,该方法被调用。
  2. - (void)loadView;
    当每次访问UIViewController的view(比如controller.view,self.view)并且view为nil,该方法就会被调用。
  3. - (void)viewWillUnload;
  4. - (void)viewDidUnload;
  5. - (void)viewDidLoad;
    不管是通过xib文件还是重写loadView创建UIViewController的view,在view创建完毕后,最终都会调用该方法。
  6. - (void)viewWillAppear:(BOOL)animated;
    当view将要呈现在UI界面上时会调用该方法。
  7. - (void)viewDidAppear:(BOOL)animated;
    当view已经完全过渡到屏幕上时会调用该方法。
  8. - (void)viewWillDisappear:(BOOL)animated;
    当view将要消失,或被覆盖、隐藏时会调用该方法。
  9. - (void)viewDidDisappear:(BOOL)animated;
    当view已经完全消失,或被覆盖、隐藏时会调用该方法。

2.UIViewController xib的加载过程

loadView默认实现就是在自定义的UIViewController类里不重写loadView方法,或者重写后只是在方法里简单实现[super loadView]。默认实现做了如下几个工作:

  1. 它会先去查找与UIViewController相关联的xib文件,通过加载xib文件来创建UIViewController的view
    如果在初始化UIViewController指定了xib文件名,就会根据传入的xib文件名加载对应的xib文件
    [[UIViewController alloc] initWithNibName:@”ViewController” bundle:nil];
    如果没有明显地传xib文件名,就会加载跟UIViewController同名的xib文件
    [[UIViewController alloc] init]; // 加载UIViewController.xib
  2. 如果没有找到相关联的xib文件,就会创建一个空白的UIView,然后赋值给UIViewController的view属性,大致如下:
    self.view = [[[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame] autorelease];

3.几种控制器容器的优缺点

1.UITabBarController(Tabbar底部标签式:Instagram、微信、微博)

UITabBarController作为一种容器适合管理底部标签式(TabBar 如: Instagram、微信、微博)这种结构的APP

优点

  1. 清楚当前所在的入口位置
  2. 轻松在各入口间频繁跳转且不会迷失方向
  3. 直接展现最重要入口的内容信息(默认首页)

缺点

功能入口过多时,该模式显得笨重不实用(超过5个的时候会将其他控制器添加到一个更多界面)

2.UINavigationController (Springboard跳板式:星巴克)

UINavigationController作为一种容器适合管理跳板式(SpringBoard 如: 星巴克)这种结构的APP

优点

  1. 清晰展现各入口
  2. 容易记住各入口位置,方便快速找到

确定

  1. 无法在多入口间灵活跳转,不适合任务操作
  2. 容易形成更深的路径
  3. 不能直接展现入口内容
  4. 不能显示太多入口次级内容

3.UINavigationController做整体,融合TabBarController(List Menu列表式:知乎)

优点

  1. 层次展示清晰
  2. 可展示内容较长的标题
  3. 可展示标题的次级内容

缺点

  1. 同级内容过多时,用户浏览容易产生疲劳
  2. 排版灵活性不是很高
  3. 只能通过排列顺序、颜色来区分各入口重要程度

4.UIScrollvIewController融合pageControl (Carousel旋转木马式:豆瓣同城)

优点

  1. 单页面内容整体性强
  2. 线性的浏览方式有顺畅感、方向感

缺点

  1. 不适合展示过多页面
  2. 不能跳跃性地查看间隔的页面,只能按顺序查看相邻的页面
  3. 由于各页面内容结构相似,容易忽略后面的内容

5. Drawer抽屉式:豆瓣小组

优点

  1. 兼容多种模式(页面内自有组织)
  2. 扩展性好

缺点

  1. 隐藏框架中其他入口
  2. 对入口交互的功能可见性(affordance)要求高
  3. 对排版要求高

6. Plus点聚式:Path

优点

  1. 灵活
  2. 展示方式有趣
  3. 使界面更开阔

缺点

  1. 隐藏框架中其他入口
  2. 对入口交互的功能可见性(affordance)要求高

7.Gallery陈列馆式:多看,豆瓣电影

优点

  1. 直观展现各项内容
  2. 方便浏览经常更新的内容

缺点

  1. 不适合展现顶层入口框架
  2. 容易形成界面内容过多,显得杂乱
  3. 设计效果容易呆板

8.Waterfall瀑布式

优点

  1. 浏览时产生流畅体验

缺点

  1. 缺乏对整体内容的体积感,容易发生空间位置迷失
  2. 浏览一段时间后,容易产生疲劳感