ios - Swift 怎么用xib 自定义View?
大家讲道理
大家讲道理 2017-04-17 17:24:05
[iOS讨论组]

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

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

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

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
ringa_lee

我觉得 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 多方便啊
有提示。。还不会输错。。。

你们是都没踩过坑。。。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号