一.UIViewController基础概念

iOS的整个UI开发的核心思想是基于MVC架构进行设计,UIViewController就是作为视图控制器的存在。

  • Controller作为整个UI视图的控制器,对于用户的输入做出逻辑处理,例如用户点击某个按钮应该执行什么操作等。
  • View角色只负责显示视图。
  • Model也就是我们的数据模型,例如从Core data中加载的实体类等等。

二.UIViewController的生命周期

如果使用 StoryBoard 来创建 ViewController,我们不需要显式地去初始化,Storyboard 会自动使用initWithCoder:进行初始化。如果不使用 StoryBoard,我们可以使用init:函数进行初始化,init:函数在实现过程中还会调用initWithNibName:bundle:

初始化完成后,VC 的生命周期会经过下面几个函数:

  • (void)loadView
  • (void)viewDidLoad
  • (void)viewWillAppear
  • (void)viewWillLayoutSubviews
  • (void)viewDidLayoutSubviews
  • (void)viewDidAppear
  • (void)viewWillDisappear
  • (void)viewDidDisappear

在经过viewDidLoad之后UIViewController的状态是对称对应的。

三.UIViewController的组织方式

在iOS中根据UIViewController的组织方式大致可分为四种类型:

  • UINavigationController:以push/pop方式切换(替换),它活动的UIViewController只有当前被push出来的那一个,被替换的控制器将会销毁,是一种链式的组织方式。
  • ModalViewController:以present方式切换(覆盖),所有在present链上的控制器不会被销毁,是一种链式的组织方式。
  • UITabBarController:以标签页的方式切换(并行),加载过的子控制器会一直存在除非内存不足,是一种树形的组织方式。
  • ChildViewController:以添加的方式加入控制器树中(并行),由父控制器直接来控制它的子控制器,是一种树形的组织方式。

四.编写UIViewController的基本代码规范

@interface ViewController ()

@property(nonatomic,strong)UIView * topView;

@end

@implementation ViewController

#pragma mark - LifeCycle Menthod
- (void)viewDidLoad {
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

#pragma mark - Delegate Menthod

#pragma mark - Event response

#pragma mark - Private Menthods

#pragma mark - getter && setter
-(UIView*)topView{
    if (!_topView) {
        _topView = [[UIView alloc]init];
    }
    return _topView;
}

@end
  • 不要在viewDidLoad里面初始化view然后再addSubView,在属性的getter中完成初始化。
  • 在viewDidload里面只做addSubView的事情,建议把constraints写在viewDidLoad里面,可以写一个layoutSubviewConstraints这样的方法,然后在viewDidLoad里面调用它。
  • 最后在viewDidAppear里面做Notification的监听之类的事情,属性的初始化,则交给getter去做。

results matching ""

    No results matching ""