ios - 使用输入参数初始化 xib
问题描述
我正在尝试做一个简单的控件来模拟我可以在 xcode 界面设计器中使用的“android 选项卡”。
所以我做了一个简单的 XIB,它有几个界面对象(滚动、堆栈、uiview ...),并给了他一个名为“TabsCustomControl”的类
我现在的问题是知道我应该如何设置/初始化这个 xib/UIView 类。
在我看来,在初始化时将参数传递给 xib/custom UIView 是有道理的,这样它就可以根据选项卡的数量知道选项卡应该具有哪些尺寸/颜色/图像。
但我一跑
let tabsCustomControl = Bundle.main.loadNibNamed("TabsCustomControl", owner: self, options: nil)!.first as! TabsCustomControl
我没有机会配置它
tabsCustomControl.tabs = ["first tab"]
它运行初始化...但我仍然没有使用选项卡列表 [String] 定义属性,所以现在发生的情况是代码在没有任何有关选项卡的信息的情况下运行。
@IBInspectable var tabs : [String] = []
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
private func setup()
{
// THIS IS Empty, so loop is not running
for _ in tabs {
let newTab = UIButton()
newTab.backgroundColor = UIColor.green
newTab.setTitle("Test", for: .normal)
horizontalStackView.addArrangedSubview(newTab)
}
}
我可以通过在类初始化和参数设置后运行 setup() 函数来解决这个问题,但这似乎很糟糕,因为我会在很多地方使用它......我每次创建后都会坚持调用 .setup()西布
我应该使用什么方法?
解决方案
也许在 didSet 中运行设置
@IBInspectable var tabs : [String] = [] {
didSet {
setup()
}
这意味着您必须确保在启动 VC 后确实设置了选项卡
推荐阅读
- javascript - 如何通过ajax下载csv文件
- swift - 如何在 forEach 循环中传递变量函数
- angular - 如何修复此未定义的 addEventListener 错误
- python - 如何将sql中的多个重命名聚合变量转换为python?
- node.js - Telegraf:“replyWithInvoice”不适用于“callback_query::”
- mysql - 使用十六进制表示法将 UTF 符号插入 Mysql
- powershell - PowerShell 开关参数未按预期工作
- swift - xcode中“产品”下的“应用程序”是什么?
- python - 仅读取单行时,会丢弃命名管道内容
- javascript - 从非异步调用 Async/await 函数并添加值返回未定义