我在Interface Builder中设计了一个相当复杂的表单,大约有20个IBOutlets
。表单分为多个部分,并且是静态的。
某些部分可能已启用,而其他部分则被禁用(隐藏)。填写表单后,应用程序需要读取所有值(即IBOutlets
,例如UITextField
)并将其发送到服务器。
我使用多个UIStackViews
设计表单的每个部分,以便可以轻松打开或关闭它们。
在与视图进行如此分离之后,具有能够反映相同顺序的模型是合乎逻辑的。
但是,我必须将所有IBOutlets
链接到UIViewController
子类,以平整任何层次结构。
我想要实现的是将单个“表单节模型”与特定的“视图”链接。控制器将仅负责启用/禁用该部分。表单节模型实际上将启用特定的标签和StackViews并填写表单值。
这是示例代码,我希望界面看起来像这样:
import UIKit
class AddressSection {
@IBOutlet weak var sectionStackView: UIStackView!
@IBOutlet weak var sectionTitleLabel: UILabel!
@IBOutlet weak var addressTextField: UITextField!
@IBOutlet weak var isPrimary: UISwitch!
var isHidden: Bool {
get {
return sectionStackView.isHidden
}
set(newValue) {
sectionStackView.isHidden = newValue
}
}
init(){}
}
class NameSection {
@IBOutlet weak var sectionStackView: UIStackView!
@IBOutlet weak var name: UITextField!
@IBOutlet weak var surname: UITextField!
var isHidden: Bool {
get {
return sectionStackView.isHidden
}
set(newValue) {
sectionStackView.isHidden = newValue
}
}
init(){}
}
class MyViewController: UIViewController {
let name = NameSection()
let address = AddressSection()
override func viewDidLoad() {
super.viewDidLoad()
name.isHidden = false
address.isHidden = true
}
}