У меня есть довольно сложная форма, разработанная в Интерфейсном Разработчике, имеющая около 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
}
}