iOS开发之自定义控制器的view

    当创建完控制器,需要加载控制器的view时,苹果默认的做法是去加载storyboard的view,要自定义控制器的view,就需要重写控制器的loadView方法,这个方法的作用就是自定义控制器view,如果重写了这个方法,就不会去加载storyboard描述的控制器的View。

    一般重写某个方法时,我们会先调用[super xxx]方法,比如当我们重写loadView方法时,会先调用[super loadView]方法,但是在控制器这里的super是指的UIViewController,也就是说调用系统默认的做法,去加载storyboard的view,然而这并不是我们自定义view想要的,所以在这里不能调用[super loadView],所以,一旦重写loadView方法,就不要[super loadView]。需要注意的是,在laodView方法中,如果没有自定义的view,那么就无法获取控制器的view了,所以在这个方法中,不能使用self.view,否则会死循环。loadView方法什么时候调用?当第一次使用控制器view的时候调用。也就是调用view的getter方法时。

- (UIView *)view{
    
    if (_view == nil) {
        [self loadView];
        [self viewDidLoad];
    }
    return _view;
}

这是一种自定义控制器view的方式。另外一种就是使用xib。

UIViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

只要通过initWithNibName:bundle:初始化控制器,并且nibName为nil时,就会执行以下几步:

1.寻找有没有跟控制器类名同名但是不带Controller的xib,如果有就会去加载。(优先级最高)

2.寻找有没有跟控制器类名同名的xib,如果有就会去加载

3.如果都没有找到,创建空的view。

xib描述了控制器的view之后,也是默认通过loadView方法去加载view的。


控制器view懒加载:

控制器的view并不是创建完控制器后去加载的,而是当第一次使用view时才会去加载。


你可能感兴趣的:(iOS开发之自定义控制器的view)