swift - UIKit:如何创建一个基础的、重用的 XIB 文件并在其中添加不同的内容?
问题描述
首先,一些基本信息:我的项目使用 UIKit,带有 XIB 文件(没有 Storyboard)。
对于给定的视图控制器,比如说MyTestViewController.swift
,我有一个关联MyTestViewController.xib
文件。这就是我初始化视图控制器的方式:
public init() {
super.init(nibName: "MyTestViewController", bundle: .main)
}
required public init?(coder: NSCoder) {
fatalError()
}
现在这是我的问题:我有一个Item
协议,其中包含许多符合它的结构:
protocol Item {
var headerElements: [String]
}
struct Pen: Item {
var headerElements: [String]
var inkColor: UIColor
var inkAmount: CGFloat
}
struct Key: Item {
var headerElements: [String]
var weight: CGFloat
var color: UIColor
}
struct Card: Item {
var headerElements: [String]
var name: String
var number: Int
}
// ...
现在,我想做的是为这些项目中的每一个创建一个表单视图控制器:
如您所见,这些表单中的每一个都包含一些基本组件:headerElements
顶部的视图和创建按钮。唯一的区别是每个Item
子类的形式不同。
我正在考虑做这样的事情:
class BaseItemFormViewController: UIViewController {
@IBOutlet weak var headerElementsView: UIView!
@IBOutlet weak var button UIButton!
// ...
}
然后,每个Item
子类都可以轻松继承:
class PenItemFormViewController: BaseItemFormViewController {
@IBOutlet weak var inkColorTextField: UITextField!
@IBOutlet weak var inkAmountTextField: UITextField!
// ...
}
但是,困扰我的是,我必须使用相同的冗余元素(headerElements 和按钮)重新创建每个 XIB 文件,并将它们链接起来。
所以我想知道是否可以改为创建一个BaseItemFormViewController
包含headerElements
视图和创建按钮的视图,以及一个可以添加所需表单的空视图。然后,对于每个Item
子类,只需创建相关表单并将其添加到BaseItemFormViewController
. 像这样:
有什么办法可以做到这一点?
谢谢您的帮助!
解决方案
推荐阅读
- python - 使用 SQL 数据库的 Python 保存功能
- r - 线图 - 使用 R 的年份列与其他列
- tcp - 端口重定向不适用于 IP 表
- c++ - 在 C++ 中更改组合分类变量
- angular - 在 Angular 9 中选择框的补丁值
- sql - 自动更新表格字段
- grails - Grails 4.0.3 - `micronaut-http-client` 插件的问题
- c - 如何反转 spin_lock_init
- asp.net-core - 在 .Net Core API 中,当我使用 Microsoft Identity AddSignIn 而不是旧解决方案时 AddAuthentication CORS 不起作用
- azure - 消息之间的延迟 Azure Botframework 虚拟助手 - 技能