美文网首页
创建View的两种方式

创建View的两种方式

作者: 飞飞超人 | 来源:发表于2019-03-05 09:50 被阅读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了。

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

    相关文章

      网友评论

          本文标题:创建View的两种方式

          本文链接:https://www.haomeiwen.com/subject/vftnuqtx.html