在iOS中创建自定义视图以进行多次重用

这是 我在Stack Overflow上写的答案的转贴

当您发现自己反复使用视图布局时,这是创建自定义视图的不错选择。 以下说明是使用Swift的基本指南。

添加自定义视图文件

以下两个文件将构成您的自定义视图:

  • .xib文件包含布局
  • .swift文件作为UIView子类

添加它们的详细信息如下。

Xib文件

将.xib文件添加到您的项目 文件>新建>文件…>用户界面>视图 。 我打电话给我ReusableCustomView.xib

创建您希望自定义视图具有的布局。 例如,我将使用UILabelUIButton进行布局。 使用自动布局是个好主意,这样无论您以后将其设置为多大,东西都会自动调整大小。 (我在“属性”检查器中将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