ios - Swift 怎么用xib 自定义View?

 他w与他说 发布于 2022-10-30 13:58

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

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

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

2 个回答
  • 你们都是这样自定义 view 的嘛。。。。。。。

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

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

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

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

    你们是都没踩过坑。。。

    2022-10-31 21:17 回答
  • 我觉得 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 版手打的,不知道有没有错,如果有小问题自己调整下,大概是这个意思。

    2022-10-31 21:17 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有