Управляйте динамическим c представлением с другим подклассом в swift? - PullRequest
0 голосов
/ 26 апреля 2020

Каков наилучший способ динамического обновления / замены представления другим представлением подкласса в зависимости от режима приложения?

У меня в приложении три режима. У меня есть панель инструментов в верхней половине экрана, которая имеет несколько меток и динамически меняет свои данные и размер в зависимости от режима. 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, а затем обновляю ограничения, мое приложение вылетает с утверждением «Супервизор представления не должен быть нулевым».

Что я здесь не так делаю?

...