用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 多方便啊
有提示。。还不会输错。。。
你们是都没踩过坑。。。