创建View的两种方式

2019-03-05  本文已影响0人  飞飞超人

实例化一个UIView分两类,一类是UIView是使用xib制作的,一类是UIView纯手写的。

使用xib布局view开发效率更高,易于调试;使用UIView手写,代码效率更高;看项目具体取舍了。

不管哪种方法创建都会调用viewDidLoad和loadView方法。

xib制作:

使用xib制作的UIView可以有两种实例化方法,一种是在IB中直接使用,这种方法只需要修改下图中的类名(注意修改的是包含当前View的父View中的这个View的类名,比较绕),使用我们自定义的类。这样,程序在创建包含

当前View的对象时会自动实例化我们的view。加载完成会调用awakeFromNib


View类名.png

另一种方法是动态加载,半程序化加载,这种方法在代码中创建加载需要使用的UIView,代码中创建也有两种方法,加载完成同样会调用awakeFromNib。方法一,在View的类中实现一个静态的创建方法,例子中为SearchIULiveView。

+ (instancetype)loadFromeNib {
    UINib *nib = [UINib nibWithNibName:NSStringFromClass(self) bundle:nil];
    UIView *aView = [nib instantiateWithOwner:nil options:nil].firstObject;
    if ([aView isKindOfClass:self]) {
        return (SearchIULiveView *)aView;
    }
    return nil;
}

方法二:在UIView的扩展中实现下面的接口,今后就方便使用了。

    NSString* className = ClassNameString(self);
    NSArray* nibs = [[NSBundle mainBundle] loadNibNamed:className owner:self options:nil];
    UIView* instance = [nibs objectAtIndex:0];
    NSAssert([className isEqualToString:ClassNameString([instance class])], @"Invalid object");
    return instance

使用这种方法创建的view会调用initwithcoder方法,这种方法也称为半程序化的创建方法。

纯手写:

纯手写的代码不需要加载xib,只需要调用对应View的初始化函数就好了,这个函数可以是init(init中实现初始布局),也可以是自定义的initXXX函数。当然这个不会调用awakeFromNib了。

具体使用哪种方法就看自己的需求了,总之要灵活使用,都会使用。

上一篇下一篇

猜你喜欢

热点阅读