diff --git a/MVMCoreUI/BaseControllers/ViewController.swift b/MVMCoreUI/BaseControllers/ViewController.swift index 4fd8d5f5..56b58b89 100644 --- a/MVMCoreUI/BaseControllers/ViewController.swift +++ b/MVMCoreUI/BaseControllers/ViewController.swift @@ -234,13 +234,16 @@ import MVMCore open func handleNewData(_ pageModel: PageModelProtocol? = nil) { guard var newPageModel = pageModel ?? self.pageModel else { return } - let originalModel = isFirstRender ? self.pageModel as? MVMControllerModelProtocol : nil + let originalModel = isFirstRender ? nil : self.pageModel as? MVMControllerModelProtocol - if originalModel != nil, let behaviorContainer = newPageModel as? PageBehaviorContainerModelProtocol { + // Refresh our behaviors if there is a page change. + if let behaviorContainer = newPageModel as? (PageBehaviorContainerModelProtocol & TemplateModelProtocol), + (originalModel == nil || originalModel!.id != behaviorContainer.id) { var behaviorHandler = self behaviorHandler.applyBehaviors(pageBehaviorModel: behaviorContainer) } + // Setup the default navigation bar if it is missing. if newPageModel.navigationBar == nil { let navigationItem = createDefaultLegacyNavigationModel() newPageModel.navigationBar = navigationItem @@ -268,6 +271,7 @@ import MVMCore } } + // Apply the form validator to the controller. if formValidator == nil { // TODO: Can't change form rules? let rules = (newPageModel as? FormHolderModelProtocol)?.formRules formValidator = FormValidator(rules) @@ -311,12 +315,13 @@ import MVMCore /// Applies the latest model to the UI. open func updateUI(for molecules: [MoleculeModelProtocol]? = nil) { - guard molecules == nil else { return } executeBehaviors { (behavior: PageMoleculeTransformationBehavior) in - behavior.willRender(rootMolecules: getRootMolecules(), delegateObjectIVar) + behavior.willRender(rootMolecules: molecules ?? getRootMolecules(), delegateObjectIVar) } + guard molecules == nil else { return } + if let backgroundColor = model?.backgroundColor { view.backgroundColor = backgroundColor.uiColor }