Fixed priority defect in view constraining view. Change the way names are set for reuse improve current margin logic
77 lines
3.5 KiB
Swift
77 lines
3.5 KiB
Swift
//
|
|
// MoleculeStackTemplate.swift
|
|
// MVMCoreUI
|
|
//
|
|
// Created by Scott Pfeil on 2/11/19.
|
|
// Copyright © 2019 Verizon Wireless. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
public class MoleculeStackTemplate: ThreeLayerViewController {
|
|
var modulesRequired: NSMutableArray?
|
|
|
|
public override func shouldFinishProcessingLoad(_ loadObject: MVMCoreLoadObject, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject>) -> Bool {
|
|
var shouldFinish = super.shouldFinishProcessingLoad(loadObject, error: error)
|
|
if shouldFinish, let firstError = modulesNeeded().errors?.firstObject as? MVMCoreErrorObject {
|
|
// Don't continue if there was an error loading needed modules.
|
|
error.pointee = firstError
|
|
shouldFinish = false
|
|
}
|
|
return shouldFinish
|
|
}
|
|
|
|
public override func spaceBetweenTopAndMiddle() -> CGFloat? {
|
|
return 0
|
|
}
|
|
|
|
public override func viewForTop() -> UIView? {
|
|
guard let moleculeJSON = loadObject?.pageJSON?.optionalDictionaryForKey("header"), let molecule = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(forJSON: moleculeJSON, delegateObject: delegateObject() as? MVMCoreUIDelegateObject, constrainIfNeeded: true) else {
|
|
return nil
|
|
}
|
|
return molecule
|
|
}
|
|
|
|
public override func viewForMiddle() -> UIView? {
|
|
guard let moleculeJSON = loadObject?.pageJSON?.optionalDictionaryForKey("moleculeStack") else {
|
|
return nil
|
|
}
|
|
let stack = MoleculeStackView(frame: .zero)
|
|
stack.useStackSpacingBeforeFirstItem = true
|
|
stack.setWithJSON(moleculeJSON, delegateObject: delegateObject() as? MVMCoreUIDelegateObject, additionalData: nil)
|
|
return stack
|
|
}
|
|
|
|
override public func viewForBottom() -> UIView? {
|
|
guard let moleculeJSON = loadObject?.pageJSON?.optionalDictionaryForKey("footer"), let molecule = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(forJSON: moleculeJSON, delegateObject: delegateObject() as? MVMCoreUIDelegateObject, constrainIfNeeded: true) else {
|
|
return nil
|
|
}
|
|
return molecule
|
|
}
|
|
|
|
// MARK: - cache handling
|
|
public override func pageTypesToListenFor() -> [Any]? {
|
|
guard let pageType = self.pageType else {
|
|
return super.pageTypesToListenFor()
|
|
}
|
|
return [pageType]
|
|
}
|
|
|
|
public override func modulesToListenFor() -> [Any]? {
|
|
// Get all of the molecules that need modules.
|
|
return modulesNeeded().modules as? [Any]
|
|
}
|
|
|
|
/// Gets the modules needed.
|
|
func modulesNeeded() -> (modules: NSMutableArray?, errors: NSMutableArray?) {
|
|
let modules: NSMutableArray = []
|
|
let errors: NSMutableArray = []
|
|
let delegate = delegateObject() as? MVMCoreUIDelegateObject
|
|
MVMCoreUIMoleculeMappingObject.addRequiredModules(forJSON: loadObject?.pageJSON?.optionalDictionaryForKey("header"), delegateObject: delegate, moduleList: modules, errorList: errors)
|
|
MVMCoreUIMoleculeMappingObject.addRequiredModules(forJSON: loadObject?.pageJSON?.optionalDictionaryForKey("footer"), delegateObject: delegate, moduleList: modules, errorList: errors)
|
|
MVMCoreUIMoleculeMappingObject.addRequiredModules(forJSON: loadObject?.pageJSON?.optionalDictionaryForKey("moleculeStack"), delegateObject: delegate, moduleList: modules, errorList: errors)
|
|
modulesRequired = modules
|
|
return (modules.count > 0 ? modules : nil, errors.count > 0 ? errors : nil)
|
|
}
|
|
}
|