Каков наилучший способ динамического обновления / замены представления другим представлением подкласса в зависимости от режима приложения?
У меня в приложении три режима. У меня есть панель инструментов в верхней половине экрана, которая имеет несколько меток и динамически меняет свои данные и размер в зависимости от режима. 75% меток на панели инструментов для каждого режима одинаковы, поэтому я создал суперкласс DashboardView и у меня есть три подкласса, в которых суперклассом является Dashboard.
У меня все работает, но мой код чрезвычайно неэффективен. Мой viewcontroller должен выгрузить и перезагрузить представление, даже если режим приложения не изменился. Вот код:
lazy var dashboardView = DashboardView()
override func viewDidLoad() {
...
view.addSubview(dashboardView)
}
override func viewWillAppear() {
dashboardView.removeFromSuperview()
switch appMode {
case mode1:
dashboardView = DashboardSubclass1View() //I reuse the same var so update Constraints works
case mode2:
dashboardView = DashboardSubclass2View()
etc.
}
view.addSubview(dashboardView) //re-add the view now with the subclass
updateViewConstraints() //I to do this to allow the view to adjust for the height change of the view and autolayout
}
Я узнаю, что этот код отстой; Я загружаю представление в viewDidLoad, чтобы удалить его снова в viewDidAppear каждый раз, когда приложение загружается. Затем я выгружаю и перезагружаю это представление каждый раз, когда оно появляется, даже если appMode не меняется.
Если я не удаляю представление в viewDidAppear, а просто делаю dashboardView равным DashboardSubclass1View, а затем обновляю ограничения, мое приложение вылетает с утверждением «Супервизор представления не должен быть нулевым».
Что я здесь не так делаю?