(ios) Swift 怎么用xib 自定义View?

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

-instancetypeinit { 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 里我是这样写的:

+ instancetypeviewFromXib { 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.loadNibNamedStringself, owner: nil, options: nil.first }
}

用的时候

let view = CustomView.instantiateFromNib

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

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

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

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

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

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

你们是都没踩过坑。。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注