从登入画面开始做起(下)Day4

今天做昨天说到file owner的详细实作方法

1. 将设计好的Xib的file owner属性添加Class

注意:这边的Class是说file owner的类型,而非与MainView产生连结要产生连结要在MainView.swift档案中,添加程序码去绑定

2. 在MainView.swift之下透过Code加载Xib档案

那麽MainView.swift里面应该要有些什麽

1. @IBOulet元件与MainView.swift做连结

让MainView.swift知道我们xib里面有些什麽元件他要负责显示

2.使用NibLoadable载入Xib

什麽是NibLoadable?

是一个方便使用的框架,可以负责用来载入Nib档案

该如何使用NibLoadable?

创立一个NibLoadble.swift档案,输入以下

protocol NibOwnerLoadable: AnyObject {
    static var nib: UINib { get }
}

// MARK: - Default implmentation
extension NibOwnerLoadable {
    
    static var nib: UINib {
        UINib(nibName: String(describing: self), bundle: Bundle(for: self))
    }
}

// MARK: - Supporting methods
extension NibOwnerLoadable where Self: UIView {
    
    func loadNibContent() {
        guard let views = Self.nib.instantiate(withOwner: self, options: nil) as? [UIView],
            let contentView = views.first else {
                fatalError("Fail to load \(self) nib content")
        }
        self.addSubview(contentView)
        contentView.translatesAutoresizingMaskIntoConstraints = false
        contentView.topAnchor.constraint(equalTo: topAnchor).isActive = true
        contentView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
        contentView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
        contentView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
    }
}

这部分是参考Jeremy Xue大神,参考连结附在下面

MainView.swift透过继承NibOwnerLoadable的这个Class


使用这个名字为loadNibContent的protocol 来绑定名字与自身相同的xib档案

为了让loadNibContent能够使用,我们在初始化的状态下调用loadNibContent

3.在主视图新增UIView,将要呈现的UIView继承我所设计的MainView.swift档案

  1. 新增一个UIView在主视图
  2. 将该UIView的Custom Class绑定为MainView
  3. 用模拟器跑的话,就能够呈现Xib所设计的客制化UI的样子

如果要将即时的现场UI显示,欢迎参考Jeremy Xue下面的文章

Swift- 创建自定义视图


What is a nib?

Understanding Custom UIView In-depth: Setting File Owner vs custom class

Swift - 创建自定义视图(CustomView)


<<:  使用 DOM Parser 取属性

>>:  Day1-"Hello C"

Terraform

Terraform 前言 今天介绍一下可以快速建立GCP各服务的套件Terraform,那麽Terr...

Day 23 Ruby public vs private vs protected

public 公开方法 公开方法没有任何存取限制,可以被该类别或是子层类别的实体呼叫。 一般而言当你...

USB Type-C的工作原理与技术分析

USB Type-C的工作原理与技术分析 (一) USB 3.1 基本规格 图1.历代USB规格 ↑...

Day7-aws或gcp 我选择本机建立k8s

是否该用云端平台 在正式使用k8s的时候,部署k8s最好的情况是使用云端平台。 一来机器规格可以依照...

[PoEAA] Data Source Architectural Pattern - Data Mapper

本篇同步发布於个人Blog: [PoEAA] Data Source Architectural P...