iOS - Swift 如何从 XIB 文件加载视图

7 篇文章 0 订阅

在 IOS 开发中,我们经常会自定义视图 (UIView),有时界面的布局可能使用 XIB 文件可视化的方式会更方便。但是 Xcode 新建视图时并不能选择 Also create XIB file,所以需要单独创建 XIB 文件。而单独创建的 XIB 文件并不会和创建的视图类自动关联起来,这就需要我们手动关联并且使用代码加载 XIB 文件。

1. 在 XIB 设计中,选择右边第四个标签 (Identity),鼠标放上去的时候会显示 Show the Identity inspector。我用的 Xcode 版本是 Version 12.5.1 (12E507),不同版本可能会有差异。

在 Class 出填入你创建的类的名称,例如 CustomView,那就填写 CustomView,这样就把创建的类和 XIB 文件关联起来了。就可以拖拽控件到类中,自动生成一些代码

2. 由于在类中的 init 方法并不能读取 XIB 文件,而且在 init 方法中不能访问 self,所有我们需要新建一个方法,用来从 XIB 文件中读取信息并创建对象。这个方法必须是静态的,这样我们就可以使用类名直接调用,从了创建对象。这个方法可以定义为类似下面:

    static func loadFromNib(frame: CGRect, titleImage: String, mainTitle: String, subTitle: String) -> CustomView {
        let view = Bundle.main.loadNibNamed("CustomView", owner: self, options: nil)?.first as! CustomView

        
        return view
    }

通过上面这个方法,我们就可以创建一个 CustomView 对象。

我们还可以创建另外一个方法,用来初始化视图,这样代码更加清晰一些,不至于 loadFromNib 方法太过庞大,并且在这个方法中还可以使用 self,也方便了不少。类似如下:

    func setupViews(frame: CGRect, titleImage: String, mainTitle: String, subTitle: String) {
        self.frame = frame
        
        self.backgroundColor = .clear
}

可以在 loadFromNib 直接调用这个方法即可:

view.setupViews(frame: frame, titleImage: titleImage, mainTitle: mainTitle, subTitle: subTitle)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值