在iOS中创建自定义视图以进行多次重用
这是 我在Stack Overflow上写的答案的转贴 。
当您发现自己反复使用视图布局时,这是创建自定义视图的不错选择。 以下说明是使用Swift的基本指南。
添加自定义视图文件
以下两个文件将构成您的自定义视图:
- .xib文件包含布局
- .swift文件作为
UIView
子类
添加它们的详细信息如下。
Xib文件
将.xib文件添加到您的项目( 文件>新建>文件…>用户界面>视图 ) 。 我打电话给我ReusableCustomView.xib
。
创建您希望自定义视图具有的布局。 例如,我将使用UILabel
和UIButton
进行布局。 使用自动布局是个好主意,这样无论您以后将其设置为多大,东西都会自动调整大小。 (我在“属性”检查器中将Freeform用于xib大小,以便可以调整模拟量度,但这不是必需的。)
迅捷文件
将.swift文件添加到您的项目(文件>新建>文件…>源> Swift文件) 。 它是UIView
的子类,我叫ReusableCustomView.swift
。
import UIKit
class ResuableCustomView: UIView {
}
将Swift文件设为所有者
返回您的.xib文件 ,然后在“文档大纲”中单击“文件的所有者”。 在身份检查器中,将您的.swift文件的名称作为自定义类名称。
添加自定义查看代码
用以下代码替换ReusableCustomView.swift
文件的内容:
import UIKit
@IBDesignable
class ResuableCustomView: UIView {
let nibName = "ReusableCustomView"
var contentView:UIView?
@IBOutlet weak var label: UILabel!
@IBAction func buttonTap(_ sender: UIButton) {
label.text = "Hi"
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
func commonInit() {
guard let view = loadViewFromNib() else { return }
view.frame = self.bounds
self.addSubview(view)
contentView = view
}
func loadViewFromNib() -> UIView? {
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: nibName, bundle: bundle)
return nib.instantiate(withOwner: self, options: nil).first as? UIView
}
}
请确保正确拼写.xib文件名称的正确性。
连接插座和动作
通过控制从xib布局中的标签和按钮拖动到快捷的自定义视图代码,可以连接插座和动作。
使用自定义视图
您的自定义视图现在完成。 您要做的就是在主情节UIView
任意位置添加一个UIView
。 在Identity Inspector中将视图的类名称设置为ReusableCustomView
。