首页 > Swift 怎么用xib 自定义View?

Swift 怎么用xib 自定义View?

用Objective-C 写自定义的时候是这样写的:

-(instancetype)init
    {
        self = [super init];
        if (self) {
            self = [[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:nil options:nil].firstObject;
        }
        return self;
    }

在Swift中 self 不能重新赋值呀,该怎么写?


我觉得 OC 里也不适合这么写……> < 看着怪怪的。

swift 里是这样的:

let view = NSBundle.mainBundle().loadNibNamed("CustomView", owner: nil, options: nil)[0]

如果要写在类里面的话,应该是放在 category 里面作为工厂方法。

OC版

OC 里我是这样写的:

+ (instancetype)viewFromXib {
    NSBundle* bundle = [NSBundle mainBundle];
    NSString* className = NSStringFromClass([self class]);
    return [[bundle loadNibNamed:className owner:nil options:nil] objectAtIndexSafe:0];
}

放在 UIView 的 category 里面。用的时候这样:

CustomView* view = [CustomView viewFromXib];

Swift 版

翻译成 Swift 是这样的:

public extension UIView {
    public class func instantiateFromNib() -> Self {
        return NSBundle.mainBundle().loadNibNamed(String(self), owner: nil, options: nil).first
    }
}

用的时候

let view = CustomView.instantiateFromNib()

Swift 版手打的,不知道有没有错,如果有小问题自己调整下,大概是这个意思。


你们都是这样自定义 view 的嘛。。。。。。。

直接创建 view 的 m 和 h 文件
创建同名 xib
在 xib 的 class 里面设置一下

然后创建的时候用 loadNibName 就可以了啊。。。。。。

干嘛还要重写这堆方法。。。。

另外那个 className 的 string
最好不要 @"class"
直接用 NSStringFromClass 多方便啊
有提示。。还不会输错。。。

你们是都没踩过坑。。。

【热门文章】
【热门文章】