From 758279f30aa1d37f0ef3a7a3675a969240f8451d Mon Sep 17 00:00:00 2001 From: Lekshmi S Date: Mon, 24 Feb 2020 15:55:46 +0530 Subject: [PATCH 1/7] 18979 - List - Two Column - Compare Changes story initial commit. Added molecule and model class. --- MVMCoreUI.xcodeproj/project.pbxproj | 8 ++ .../ListTwoColumnCompareChanges.swift | 135 ++++++++++++++++++ .../ListTwoColumnCompareChangesModel.swift | 83 +++++++++++ .../OtherHandlers/MoleculeObjectMapping.swift | 1 + 4 files changed, 227 insertions(+) create mode 100644 MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChanges.swift create mode 100644 MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChangesModel.swift diff --git a/MVMCoreUI.xcodeproj/project.pbxproj b/MVMCoreUI.xcodeproj/project.pbxproj index 4afd3a24..a5a8d783 100644 --- a/MVMCoreUI.xcodeproj/project.pbxproj +++ b/MVMCoreUI.xcodeproj/project.pbxproj @@ -132,6 +132,8 @@ 94FB966323D797DA003D482B /* MFTextButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 94FB966123D797DA003D482B /* MFTextButton.m */; }; AA11A41F23F15D3100D7962F /* ListRightVariablePayments.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA11A41E23F15D3100D7962F /* ListRightVariablePayments.swift */; }; AA11A42123F15D7000D7962F /* ListRightVariablePaymentsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA11A42023F15D7000D7962F /* ListRightVariablePaymentsModel.swift */; }; + AA3320F42403A9B20052BBAC /* ListTwoColumnCompareChanges.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA3320F32403A9B20052BBAC /* ListTwoColumnCompareChanges.swift */; }; + AA3320F62403A9D10052BBAC /* ListTwoColumnCompareChangesModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA3320F52403A9D10052BBAC /* ListTwoColumnCompareChangesModel.swift */; }; C003506123AA94CD00B6AC29 /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = C003506023AA94CD00B6AC29 /* Button.swift */; }; C07065C42395677300FBF997 /* Link.swift in Sources */ = {isa = PBXBuildFile; fileRef = C07065C32395677300FBF997 /* Link.swift */; }; C695A67F23C9830600BFB94E /* UnOrderedListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C695A67E23C9830600BFB94E /* UnOrderedListModel.swift */; }; @@ -461,6 +463,8 @@ 94FB966123D797DA003D482B /* MFTextButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFTextButton.m; sourceTree = ""; }; AA11A41E23F15D3100D7962F /* ListRightVariablePayments.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListRightVariablePayments.swift; sourceTree = ""; }; AA11A42023F15D7000D7962F /* ListRightVariablePaymentsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListRightVariablePaymentsModel.swift; sourceTree = ""; }; + AA3320F32403A9B20052BBAC /* ListTwoColumnCompareChanges.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListTwoColumnCompareChanges.swift; sourceTree = ""; }; + AA3320F52403A9D10052BBAC /* ListTwoColumnCompareChangesModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListTwoColumnCompareChangesModel.swift; sourceTree = ""; }; C003506023AA94CD00B6AC29 /* Button.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Button.swift; sourceTree = ""; }; C07065C32395677300FBF997 /* Link.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Link.swift; sourceTree = ""; }; C695A67E23C9830600BFB94E /* UnOrderedListModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnOrderedListModel.swift; sourceTree = ""; }; @@ -1007,6 +1011,8 @@ isa = PBXGroup; children = ( D22B38ED23F4E11100490EF6 /* ThreeColumn */, + AA3320F32403A9B20052BBAC /* ListTwoColumnCompareChanges.swift */, + AA3320F52403A9D10052BBAC /* ListTwoColumnCompareChangesModel.swift */, ); path = SectionDividers; sourceTree = ""; @@ -1775,6 +1781,7 @@ 94C2D9842386F3F80006CF46 /* LabelAttributeModel.swift in Sources */, 944589212385D6E900DE9FD4 /* DashLineModel.swift in Sources */, D2E2A99623D8CF85000B42E6 /* HeadlineBodyLinkToggleModel.swift in Sources */, + AA3320F42403A9B20052BBAC /* ListTwoColumnCompareChanges.swift in Sources */, C6FA7D5323C77A4A00A3614A /* StringAndMoleculeStack.swift in Sources */, 94AF4A3F23E9D13900676048 /* MFCaretButton.m in Sources */, D29DF27A21E7A533003B2FB9 /* MVMCoreUISession.m in Sources */, @@ -1787,6 +1794,7 @@ D2A6390522CBCE160052ED1F /* MoleculeCollectionViewCell.swift in Sources */, D2A6390122CBB1820052ED1F /* Carousel.swift in Sources */, D29DF2C721E7BF57003B2FB9 /* MFTabBarInteractor.m in Sources */, + AA3320F62403A9D10052BBAC /* ListTwoColumnCompareChangesModel.swift in Sources */, C7F8012123E8303200396FBD /* ListRVWheel.swift in Sources */, D29DF29521E7ADB8003B2FB9 /* ProgrammaticScrollViewController.m in Sources */, D2FB151B23A2B65B00C20E10 /* MoleculeContainer.swift in Sources */, diff --git a/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChanges.swift b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChanges.swift new file mode 100644 index 00000000..36e30738 --- /dev/null +++ b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChanges.swift @@ -0,0 +1,135 @@ +// +// ListTwoColumnCompareChanges.swift +// MVMCoreUI +// +// Created by Lekshmi S on 24/02/20. +// Copyright © 2020 Verizon Wireless. All rights reserved. +// + +import Foundation + +@objcMembers open class ListTwoColumnCompareChanges: TableViewCell { + + //------------------------------------------------------- + // MARK: - Outlets + //------------------------------------------------------- + + let leftHeadline1 = Label.commonLabelB1(true) + let leftHeadline2 = Label.commonLabelB1(true) + let leftHeadline3 = Label.commonLabelB1(true) + let leftBody = Label.commonLabelB2(true) + let leftLink = Link() + let rightHeadline1 = Label.commonLabelB1(true) + let rightHeadline2 = Label.commonLabelB1(true) + let rightHeadline3 = Label.commonLabelB1(true) + let rightBody = Label.commonLabelB2(true) + let rightLink = Link() + let containerView = View() + let leftVerticalStack = UIStackView() + let rightVerticalStack = UIStackView() + + //------------------------------------------------------- + // MARK: - View Lifecycle + //------------------------------------------------------- + + open override func updateView(_ size: CGFloat) { + super.updateView(size) + containerView.updateView(size) + leftHeadline1.updateView(size) + leftHeadline2.updateView(size) + leftHeadline3.updateView(size) + leftBody.updateView(size) + leftLink.updateView(size) + rightHeadline1.updateView(size) + rightHeadline2.updateView(size) + rightHeadline3.updateView(size) + rightBody.updateView(size) + rightLink.updateView(size) + } + + open override func setupView() { + super.setupView() + guard leftHeadline1.superview == nil else { + return + } + containerView.translatesAutoresizingMaskIntoConstraints = false + leftVerticalStack.translatesAutoresizingMaskIntoConstraints = false + rightVerticalStack.translatesAutoresizingMaskIntoConstraints = false + leftVerticalStack.addArrangedSubview(leftHeadline1) + leftVerticalStack.addArrangedSubview(leftHeadline2) + leftVerticalStack.addArrangedSubview(leftHeadline3) + leftVerticalStack.addArrangedSubview(leftBody) + leftVerticalStack.addArrangedSubview(leftLink) + leftVerticalStack.axis = .vertical + leftVerticalStack.alignment = .leading + rightVerticalStack.addArrangedSubview(rightHeadline1) + rightVerticalStack.addArrangedSubview(rightHeadline2) + rightVerticalStack.addArrangedSubview(rightHeadline3) + rightVerticalStack.addArrangedSubview(rightBody) + rightVerticalStack.addArrangedSubview(rightLink) + rightVerticalStack.axis = .vertical + rightVerticalStack.alignment = .leading + containerView.addSubview(leftVerticalStack) + containerView.addSubview(rightVerticalStack) + + //containerView constraints + contentView.addSubview(containerView) + containerHelper.constrainView(containerView) + + //leftVerticalStack constraints + leftVerticalStack.leadingAnchor.constraint(equalTo: containerView.leadingAnchor).isActive = true + leftVerticalStack.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true + leftVerticalStack.widthAnchor.constraint(equalTo: containerView.widthAnchor, multiplier: 0.45).isActive = true + containerView.bottomAnchor.constraint(greaterThanOrEqualTo: leftVerticalStack.bottomAnchor).isActive = true + leftVerticalStack.setCustomSpacing(5.0, after: leftHeadline1) + leftVerticalStack.setCustomSpacing(5.0, after: leftHeadline2) + leftVerticalStack.setCustomSpacing(5.0, after: leftBody) + + //rightVerticalStack constraints + rightVerticalStack.topAnchor.constraint(equalTo: leftVerticalStack.topAnchor).isActive = true + rightVerticalStack.leadingAnchor.constraint(equalTo: leftVerticalStack.trailingAnchor).isActive = true + rightVerticalStack.trailingAnchor.constraint(equalTo: containerView.trailingAnchor).isActive = true + rightVerticalStack.widthAnchor.constraint(equalTo: containerView.widthAnchor, multiplier: 0.45).isActive = true + containerView.bottomAnchor.constraint(greaterThanOrEqualTo: rightVerticalStack.bottomAnchor).isActive = true + rightVerticalStack.setCustomSpacing(5.0, after: rightHeadline1) + rightVerticalStack.setCustomSpacing(5.0, after: rightHeadline2) + rightVerticalStack.setCustomSpacing(5.0, after: rightBody) + } + + //------------------------------------------------------ + // MARK: - Molecule + //------------------------------------------------------ + + public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { + super.setWithModel(model, delegateObject, additionalData) + guard let model = model as? ListTwoColumnCompareChangesModel else { return } + leftHeadline1.setWithModel(model.leftHeadline1, delegateObject, additionalData) + leftHeadline2.setWithModel(model.leftHeadline2, delegateObject, additionalData) + leftHeadline3.setWithModel(model.leftHeadline3, delegateObject, additionalData) + leftBody.setWithModel(model.leftBody, delegateObject, additionalData) + leftLink.setWithModel(model.leftLink, delegateObject, additionalData) + rightHeadline1.setWithModel(model.rightHeadline1, delegateObject, additionalData) + rightHeadline2.setWithModel(model.rightHeadline2, delegateObject, additionalData) + rightHeadline3.setWithModel(model.rightHeadline3, delegateObject, additionalData) + rightBody.setWithModel(model.rightBody, delegateObject, additionalData) + rightLink.setWithModel(model.rightLink, delegateObject, additionalData) + } + + open override func reset() { + super.reset() + leftHeadline1.reset() + leftHeadline2.reset() + leftHeadline3.reset() + leftBody.reset() + leftLink.reset() + rightHeadline1.reset() + rightHeadline2.reset() + rightHeadline3.reset() + rightBody.reset() + rightLink.reset() + } + + public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat { + return 121 + } +} diff --git a/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChangesModel.swift b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChangesModel.swift new file mode 100644 index 00000000..5e4e876c --- /dev/null +++ b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChangesModel.swift @@ -0,0 +1,83 @@ +// +// ListTwoColumnCompareChangesModel.swift +// MVMCoreUI +// +// Created by Lekshmi S on 24/02/20. +// Copyright © 2020 Verizon Wireless. All rights reserved. +// + +import Foundation + +public class ListTwoColumnCompareChangesModel: ListItemModel, MoleculeModelProtocol { + + public static var identifier: String = "list2CCmpr1" + public var leftHeadline1: LabelModel + public var leftHeadline2: LabelModel + public var leftHeadline3: LabelModel + public var leftBody: LabelModel + public var leftLink: LinkModel + public var rightHeadline1: LabelModel + public var rightHeadline2: LabelModel + public var rightHeadline3: LabelModel + public var rightBody: LabelModel + public var rightLink: LinkModel + + public init(leftHeadline1: LabelModel, leftHeadline2: LabelModel, leftHeadline3: LabelModel, leftBody: LabelModel, leftLink: LinkModel, rightHeadline1: LabelModel, rightHeadline2: LabelModel, rightHeadline3: LabelModel, rightBody: LabelModel, rightLink: LinkModel) { + self.leftHeadline1 = leftHeadline1 + self.leftHeadline2 = leftHeadline2 + self.leftHeadline3 = leftHeadline3 + self.leftBody = leftBody + self.leftLink = leftLink + self.rightHeadline1 = rightHeadline1 + self.rightHeadline2 = rightHeadline2 + self.rightHeadline3 = rightHeadline3 + self.rightBody = rightBody + self.rightLink = rightLink + super.init() + } + + private enum CodingKeys: String, CodingKey { + case moleculeName + case leftHeadline1 + case leftHeadline2 + case leftHeadline3 + case leftBody + case leftLink + case rightHeadline1 + case rightHeadline2 + case rightHeadline3 + case rightBody + case rightLink + } + + required public init(from decoder: Decoder) throws { + let typeContainer = try decoder.container(keyedBy: CodingKeys.self) + leftHeadline1 = try typeContainer.decode(LabelModel.self, forKey: .leftHeadline1) + leftHeadline2 = try typeContainer.decode(LabelModel.self, forKey: .leftHeadline2) + leftHeadline3 = try typeContainer.decode(LabelModel.self, forKey: .leftHeadline3) + leftBody = try typeContainer.decode(LabelModel.self, forKey: .leftBody) + leftLink = try typeContainer.decode(LinkModel.self, forKey: .leftLink) + rightHeadline1 = try typeContainer.decode(LabelModel.self, forKey: .rightHeadline1) + rightHeadline2 = try typeContainer.decode(LabelModel.self, forKey: .rightHeadline2) + rightHeadline3 = try typeContainer.decode(LabelModel.self, forKey: .rightHeadline3) + rightBody = try typeContainer.decode(LabelModel.self, forKey: .rightBody) + rightLink = try typeContainer.decode(LinkModel.self, forKey: .rightLink) + try super.init(from: decoder) + } + + public override func encode(to encoder: Encoder) throws { + try super.encode(to: encoder) + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(moleculeName, forKey: .moleculeName) + try container.encode(leftHeadline1, forKey: .leftHeadline1) + try container.encode(leftHeadline2, forKey: .leftHeadline2) + try container.encode(leftHeadline3, forKey: .leftHeadline3) + try container.encode(leftBody, forKey: .leftBody) + try container.encode(leftLink, forKey: .leftLink) + try container.encode(rightHeadline1, forKey: .rightHeadline1) + try container.encode(rightHeadline2, forKey: .rightHeadline2) + try container.encode(rightHeadline3, forKey: .rightHeadline3) + try container.encode(rightBody, forKey: .rightBody) + try container.encode(rightLink, forKey: .rightLink) + } +} diff --git a/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift b/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift index 7ae80d49..8ffc3dcf 100644 --- a/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift +++ b/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift @@ -55,6 +55,7 @@ import Foundation MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: StringAndMoleculeView.self, viewModelClass: StringAndMoleculeModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ImageHeadlineBody.self, viewModelClass: ImageHeadlineBodyModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListThreeColumnPlanDataDivider.self, viewModelClass: ListThreeColumnPlanDataDividerModel.self) + MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListTwoColumnCompareChanges.self, viewModelClass: ListTwoColumnCompareChangesModel.self) // Vertical Combination Molecules From ec9107666989735eec6c94e5e6099ad948b51671 Mon Sep 17 00:00:00 2001 From: Lekshmi S Date: Thu, 27 Feb 2020 14:19:15 +0530 Subject: [PATCH 2/7] Code cleanup --- .../ListTwoColumnCompareChanges.swift | 54 ++++++++----------- 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChanges.swift b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChanges.swift index 36e30738..bbf3467d 100644 --- a/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChanges.swift +++ b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChanges.swift @@ -13,7 +13,6 @@ import Foundation //------------------------------------------------------- // MARK: - Outlets //------------------------------------------------------- - let leftHeadline1 = Label.commonLabelB1(true) let leftHeadline2 = Label.commonLabelB1(true) let leftHeadline3 = Label.commonLabelB1(true) @@ -28,30 +27,23 @@ import Foundation let leftVerticalStack = UIStackView() let rightVerticalStack = UIStackView() + //------------------------------------------------------ + // MARK: - Properties + //------------------------------------------------------ + let stackSpacing: CGFloat = 5.0 + let widthMultiplier: CGFloat = 0.45 + //------------------------------------------------------- // MARK: - View Lifecycle //------------------------------------------------------- - open override func updateView(_ size: CGFloat) { super.updateView(size) - containerView.updateView(size) - leftHeadline1.updateView(size) - leftHeadline2.updateView(size) - leftHeadline3.updateView(size) - leftBody.updateView(size) leftLink.updateView(size) - rightHeadline1.updateView(size) - rightHeadline2.updateView(size) - rightHeadline3.updateView(size) - rightBody.updateView(size) rightLink.updateView(size) } - + open override func setupView() { super.setupView() - guard leftHeadline1.superview == nil else { - return - } containerView.translatesAutoresizingMaskIntoConstraints = false leftVerticalStack.translatesAutoresizingMaskIntoConstraints = false rightVerticalStack.translatesAutoresizingMaskIntoConstraints = false @@ -79,21 +71,21 @@ import Foundation //leftVerticalStack constraints leftVerticalStack.leadingAnchor.constraint(equalTo: containerView.leadingAnchor).isActive = true leftVerticalStack.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true - leftVerticalStack.widthAnchor.constraint(equalTo: containerView.widthAnchor, multiplier: 0.45).isActive = true + leftVerticalStack.widthAnchor.constraint(equalTo: containerView.widthAnchor, multiplier: widthMultiplier).isActive = true containerView.bottomAnchor.constraint(greaterThanOrEqualTo: leftVerticalStack.bottomAnchor).isActive = true - leftVerticalStack.setCustomSpacing(5.0, after: leftHeadline1) - leftVerticalStack.setCustomSpacing(5.0, after: leftHeadline2) - leftVerticalStack.setCustomSpacing(5.0, after: leftBody) + leftVerticalStack.setCustomSpacing(stackSpacing, after: leftHeadline1) + leftVerticalStack.setCustomSpacing(stackSpacing, after: leftHeadline2) + leftVerticalStack.setCustomSpacing(stackSpacing, after: leftBody) //rightVerticalStack constraints rightVerticalStack.topAnchor.constraint(equalTo: leftVerticalStack.topAnchor).isActive = true rightVerticalStack.leadingAnchor.constraint(equalTo: leftVerticalStack.trailingAnchor).isActive = true rightVerticalStack.trailingAnchor.constraint(equalTo: containerView.trailingAnchor).isActive = true - rightVerticalStack.widthAnchor.constraint(equalTo: containerView.widthAnchor, multiplier: 0.45).isActive = true + rightVerticalStack.widthAnchor.constraint(equalTo: containerView.widthAnchor, multiplier: widthMultiplier).isActive = true containerView.bottomAnchor.constraint(greaterThanOrEqualTo: rightVerticalStack.bottomAnchor).isActive = true - rightVerticalStack.setCustomSpacing(5.0, after: rightHeadline1) - rightVerticalStack.setCustomSpacing(5.0, after: rightHeadline2) - rightVerticalStack.setCustomSpacing(5.0, after: rightBody) + rightVerticalStack.setCustomSpacing(stackSpacing, after: rightHeadline1) + rightVerticalStack.setCustomSpacing(stackSpacing, after: rightHeadline2) + rightVerticalStack.setCustomSpacing(stackSpacing, after: rightBody) } //------------------------------------------------------ @@ -117,15 +109,15 @@ import Foundation open override func reset() { super.reset() - leftHeadline1.reset() - leftHeadline2.reset() - leftHeadline3.reset() - leftBody.reset() + leftHeadline1.styleB1(true) + leftHeadline2.styleB1(true) + leftHeadline3.styleB1(true) + leftBody.styleB2(true) leftLink.reset() - rightHeadline1.reset() - rightHeadline2.reset() - rightHeadline3.reset() - rightBody.reset() + rightHeadline1.styleB1(true) + rightHeadline2.styleB1(true) + rightHeadline3.styleB1(true) + rightBody.styleB2(true) rightLink.reset() } From 1c8c452fbed209cd2c8b74d1fd747ccb80954bf3 Mon Sep 17 00:00:00 2001 From: Lekshmi S Date: Fri, 28 Feb 2020 12:28:49 +0530 Subject: [PATCH 3/7] Created folder structure --- MVMCoreUI.xcodeproj/project.pbxproj | 12 ++++++++++-- .../ListTwoColumnCompareChanges.swift | 0 .../ListTwoColumnCompareChangesModel.swift | 0 3 files changed, 10 insertions(+), 2 deletions(-) rename MVMCoreUI/Molecules/DesignedComponents/SectionDividers/{ => TwoColumn}/ListTwoColumnCompareChanges.swift (100%) rename MVMCoreUI/Molecules/DesignedComponents/SectionDividers/{ => TwoColumn}/ListTwoColumnCompareChangesModel.swift (100%) diff --git a/MVMCoreUI.xcodeproj/project.pbxproj b/MVMCoreUI.xcodeproj/project.pbxproj index ac07d53c..a74f1bc6 100644 --- a/MVMCoreUI.xcodeproj/project.pbxproj +++ b/MVMCoreUI.xcodeproj/project.pbxproj @@ -848,6 +848,15 @@ path = RightVariable; sourceTree = ""; }; + AAC3DC442408F14B00807E91 /* TwoColumn */ = { + isa = PBXGroup; + children = ( + AA3320F52403A9D10052BBAC /* ListTwoColumnCompareChangesModel.swift */, + AA3320F32403A9B20052BBAC /* ListTwoColumnCompareChanges.swift */, + ); + path = TwoColumn; + sourceTree = ""; + }; D213347423842FE3008E41B3 /* Controllers */ = { isa = PBXGroup; children = ( @@ -1050,9 +1059,8 @@ D22B38EC23F4E10700490EF6 /* SectionDividers */ = { isa = PBXGroup; children = ( + AAC3DC442408F14B00807E91 /* TwoColumn */, D22B38ED23F4E11100490EF6 /* ThreeColumn */, - AA3320F32403A9B20052BBAC /* ListTwoColumnCompareChanges.swift */, - AA3320F52403A9D10052BBAC /* ListTwoColumnCompareChangesModel.swift */, ); path = SectionDividers; sourceTree = ""; diff --git a/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChanges.swift b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChanges.swift similarity index 100% rename from MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChanges.swift rename to MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChanges.swift diff --git a/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChangesModel.swift b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChangesModel.swift similarity index 100% rename from MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChangesModel.swift rename to MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChangesModel.swift From 188277742a5d1be482960222b0ed18e6cc6d4463 Mon Sep 17 00:00:00 2001 From: Subhankar Acharya Date: Mon, 2 Mar 2020 16:44:49 +0530 Subject: [PATCH 4/7] Code refactoring. --- MVMCoreUI.xcodeproj/project.pbxproj | 16 ++++++++++ .../ListTwoColumnCompareChanges.swift | 29 +++++++++---------- .../OtherHandlers/MoleculeObjectMapping.swift | 1 + 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/MVMCoreUI.xcodeproj/project.pbxproj b/MVMCoreUI.xcodeproj/project.pbxproj index 339735f3..c1334170 100644 --- a/MVMCoreUI.xcodeproj/project.pbxproj +++ b/MVMCoreUI.xcodeproj/project.pbxproj @@ -108,6 +108,8 @@ 5248BFED23F12E350059236A /* ListThreeColumnPlanDataDividerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5248BFEB23F12E350059236A /* ListThreeColumnPlanDataDividerModel.swift */; }; 525019E52406852100EED91C /* ListFourColumnDataUsageDividerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525019E42406852100EED91C /* ListFourColumnDataUsageDividerModel.swift */; }; 525019E72406853600EED91C /* ListFourColumnDataUsageDivider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525019E62406853600EED91C /* ListFourColumnDataUsageDivider.swift */; }; + 526A265C240D1FF700B0D828 /* ListTwoColumnCompareChangesModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 526A265B240D1FF700B0D828 /* ListTwoColumnCompareChangesModel.swift */; }; + 526A265E240D200500B0D828 /* ListTwoColumnCompareChanges.swift in Sources */ = {isa = PBXBuildFile; fileRef = 526A265D240D200500B0D828 /* ListTwoColumnCompareChanges.swift */; }; 52B201D224081CFB00D2011E /* ListLeftVariableRadioButtonAndPaymentMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B201D024081CFB00D2011E /* ListLeftVariableRadioButtonAndPaymentMethod.swift */; }; 52B201D324081CFB00D2011E /* ListLeftVariableRadioButtonAndPaymentMethodModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B201D124081CFB00D2011E /* ListLeftVariableRadioButtonAndPaymentMethodModel.swift */; }; 8D24041123E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D24041023E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift */; }; @@ -454,6 +456,8 @@ 5248BFEB23F12E350059236A /* ListThreeColumnPlanDataDividerModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListThreeColumnPlanDataDividerModel.swift; sourceTree = ""; }; 525019E42406852100EED91C /* ListFourColumnDataUsageDividerModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListFourColumnDataUsageDividerModel.swift; sourceTree = ""; }; 525019E62406853600EED91C /* ListFourColumnDataUsageDivider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListFourColumnDataUsageDivider.swift; sourceTree = ""; }; + 526A265B240D1FF700B0D828 /* ListTwoColumnCompareChangesModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListTwoColumnCompareChangesModel.swift; sourceTree = ""; }; + 526A265D240D200500B0D828 /* ListTwoColumnCompareChanges.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListTwoColumnCompareChanges.swift; sourceTree = ""; }; 52B201D024081CFB00D2011E /* ListLeftVariableRadioButtonAndPaymentMethod.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListLeftVariableRadioButtonAndPaymentMethod.swift; sourceTree = ""; }; 52B201D124081CFB00D2011E /* ListLeftVariableRadioButtonAndPaymentMethodModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListLeftVariableRadioButtonAndPaymentMethodModel.swift; sourceTree = ""; }; 8D24041023E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListLeftVariableIconWithRightCaret.swift; sourceTree = ""; }; @@ -825,6 +829,15 @@ path = FourColumn; sourceTree = ""; }; + 526A265A240D1FCE00B0D828 /* TwoColumn */ = { + isa = PBXGroup; + children = ( + 526A265B240D1FF700B0D828 /* ListTwoColumnCompareChangesModel.swift */, + 526A265D240D200500B0D828 /* ListTwoColumnCompareChanges.swift */, + ); + path = TwoColumn; + sourceTree = ""; + }; 946EE1B5237B663A0036751F /* Extensions */ = { isa = PBXGroup; children = ( @@ -1071,6 +1084,7 @@ D22B38EC23F4E10700490EF6 /* SectionDividers */ = { isa = PBXGroup; children = ( + 526A265A240D1FCE00B0D828 /* TwoColumn */, 525019E3240684E500EED91C /* FourColumn */, D22B38ED23F4E11100490EF6 /* ThreeColumn */, ); @@ -1801,6 +1815,7 @@ DBEFFA04225A829700230692 /* Label.swift in Sources */, D2D6CD4022E78C1A00D701B8 /* Scroller.swift in Sources */, 0A7EF85F23D8ABC500B2AAD1 /* MdnEntryFieldModel.swift in Sources */, + 526A265C240D1FF700B0D828 /* ListTwoColumnCompareChangesModel.swift in Sources */, 01509D952327ED1900EF99AA /* HeadlineBodyLinkToggle.swift in Sources */, 31BE15CB23D8924D00452370 /* CheckboxLabelModel.swift in Sources */, D260105523CEA7DC00764D80 /* MVMCoreUISwitch+Model.swift in Sources */, @@ -1859,6 +1874,7 @@ 94AF4A3F23E9D13900676048 /* MFCaretButton.m in Sources */, D29DF27A21E7A533003B2FB9 /* MVMCoreUISession.m in Sources */, D2A5146B2214905000345BFB /* ThreeLayerViewController.swift in Sources */, + 526A265E240D200500B0D828 /* ListTwoColumnCompareChanges.swift in Sources */, 8D24041523E7FC0B009E23BE /* ListLeftVariableIconWithRightCaretModel.swift in Sources */, D28A838F23CCDEDE00DFE4FC /* TwoButtonViewModel.swift in Sources */, D2D90B42240463E100DD6EC9 /* MoleculeHeaderModel.swift in Sources */, diff --git a/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChanges.swift b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChanges.swift index bbf3467d..594853a3 100644 --- a/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChanges.swift +++ b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChanges.swift @@ -91,22 +91,21 @@ import Foundation //------------------------------------------------------ // MARK: - Molecule //------------------------------------------------------ - - public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { - super.setWithModel(model, delegateObject, additionalData) + open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { + super.set(with: model, delegateObject, additionalData) guard let model = model as? ListTwoColumnCompareChangesModel else { return } - leftHeadline1.setWithModel(model.leftHeadline1, delegateObject, additionalData) - leftHeadline2.setWithModel(model.leftHeadline2, delegateObject, additionalData) - leftHeadline3.setWithModel(model.leftHeadline3, delegateObject, additionalData) - leftBody.setWithModel(model.leftBody, delegateObject, additionalData) - leftLink.setWithModel(model.leftLink, delegateObject, additionalData) - rightHeadline1.setWithModel(model.rightHeadline1, delegateObject, additionalData) - rightHeadline2.setWithModel(model.rightHeadline2, delegateObject, additionalData) - rightHeadline3.setWithModel(model.rightHeadline3, delegateObject, additionalData) - rightBody.setWithModel(model.rightBody, delegateObject, additionalData) - rightLink.setWithModel(model.rightLink, delegateObject, additionalData) + leftHeadline1.set(with: model.leftHeadline1, delegateObject, additionalData) + leftHeadline2.set(with: model.leftHeadline2, delegateObject, additionalData) + leftHeadline3.set(with: model.leftHeadline3, delegateObject, additionalData) + leftBody.set(with: model.leftBody, delegateObject, additionalData) + leftLink.set(with: model.leftLink, delegateObject, additionalData) + rightHeadline1.set(with: model.rightHeadline1, delegateObject, additionalData) + rightHeadline2.set(with: model.rightHeadline2, delegateObject, additionalData) + rightHeadline3.set(with: model.rightHeadline3, delegateObject, additionalData) + rightBody.set(with: model.rightBody, delegateObject, additionalData) + rightLink.set(with: model.rightLink, delegateObject, additionalData) } - + open override func reset() { super.reset() leftHeadline1.styleB1(true) @@ -121,7 +120,7 @@ import Foundation rightLink.reset() } - public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat { + public override class func estimatedHeight(with molecule: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat { return 121 } } diff --git a/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift b/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift index 34da2080..1cdf579e 100644 --- a/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift +++ b/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift @@ -107,6 +107,7 @@ import Foundation // Designed Section Dividers MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListFourColumnDataUsageDivider.self, viewModelClass: ListFourColumnDataUsageDividerModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListThreeColumnPlanDataDivider.self, viewModelClass: ListThreeColumnPlanDataDividerModel.self) + MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListTwoColumnCompareChanges.self, viewModelClass: ListTwoColumnCompareChangesModel.self) // TODO: Need model MVMCoreUIMoleculeMappingObject.shared()?.moleculeMapping.setObject(DigitEntryField.self, forKey: "digitTextField" as NSString) From 361e1f043f2483249b31f6aa86c4f8a6aa334181 Mon Sep 17 00:00:00 2001 From: Lekshmi S Date: Tue, 3 Mar 2020 13:27:04 +0530 Subject: [PATCH 5/7] Code cleanup. --- .../TwoColumn/ListTwoColumnCompareChanges.swift | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChanges.swift b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChanges.swift index 594853a3..372e1305 100644 --- a/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChanges.swift +++ b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChanges.swift @@ -31,7 +31,6 @@ import Foundation // MARK: - Properties //------------------------------------------------------ let stackSpacing: CGFloat = 5.0 - let widthMultiplier: CGFloat = 0.45 //------------------------------------------------------- // MARK: - View Lifecycle @@ -67,22 +66,15 @@ import Foundation //containerView constraints contentView.addSubview(containerView) containerHelper.constrainView(containerView) + NSLayoutConstraint.pinViews(leftView: leftVerticalStack, rightView: rightVerticalStack, alignTop: true) //leftVerticalStack constraints - leftVerticalStack.leadingAnchor.constraint(equalTo: containerView.leadingAnchor).isActive = true - leftVerticalStack.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true - leftVerticalStack.widthAnchor.constraint(equalTo: containerView.widthAnchor, multiplier: widthMultiplier).isActive = true - containerView.bottomAnchor.constraint(greaterThanOrEqualTo: leftVerticalStack.bottomAnchor).isActive = true + leftVerticalStack.widthAnchor.constraint(equalTo: rightVerticalStack.widthAnchor, multiplier: 1).isActive = true leftVerticalStack.setCustomSpacing(stackSpacing, after: leftHeadline1) leftVerticalStack.setCustomSpacing(stackSpacing, after: leftHeadline2) leftVerticalStack.setCustomSpacing(stackSpacing, after: leftBody) //rightVerticalStack constraints - rightVerticalStack.topAnchor.constraint(equalTo: leftVerticalStack.topAnchor).isActive = true - rightVerticalStack.leadingAnchor.constraint(equalTo: leftVerticalStack.trailingAnchor).isActive = true - rightVerticalStack.trailingAnchor.constraint(equalTo: containerView.trailingAnchor).isActive = true - rightVerticalStack.widthAnchor.constraint(equalTo: containerView.widthAnchor, multiplier: widthMultiplier).isActive = true - containerView.bottomAnchor.constraint(greaterThanOrEqualTo: rightVerticalStack.bottomAnchor).isActive = true rightVerticalStack.setCustomSpacing(stackSpacing, after: rightHeadline1) rightVerticalStack.setCustomSpacing(stackSpacing, after: rightHeadline2) rightVerticalStack.setCustomSpacing(stackSpacing, after: rightBody) From 4f47e9fa96c6a09b35e0e3438c90df52bf44bb2a Mon Sep 17 00:00:00 2001 From: Lekshmi S Date: Thu, 12 Mar 2020 12:00:29 +0530 Subject: [PATCH 6/7] Removed extra spaces and added height constraint for stacks. --- .../TwoColumn/ListTwoColumnCompareChanges.swift | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChanges.swift b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChanges.swift index 372e1305..47d65473 100644 --- a/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChanges.swift +++ b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChanges.swift @@ -13,16 +13,16 @@ import Foundation //------------------------------------------------------- // MARK: - Outlets //------------------------------------------------------- - let leftHeadline1 = Label.commonLabelB1(true) + let leftHeadline1 = Label.commonLabelB1(true) let leftHeadline2 = Label.commonLabelB1(true) let leftHeadline3 = Label.commonLabelB1(true) - let leftBody = Label.commonLabelB2(true) - let leftLink = Link() - let rightHeadline1 = Label.commonLabelB1(true) + let leftBody = Label.commonLabelB2(true) + let leftLink = Link() + let rightHeadline1 = Label.commonLabelB1(true) let rightHeadline2 = Label.commonLabelB1(true) let rightHeadline3 = Label.commonLabelB1(true) - let rightBody = Label.commonLabelB2(true) - let rightLink = Link() + let rightBody = Label.commonLabelB2(true) + let rightLink = Link() let containerView = View() let leftVerticalStack = UIStackView() let rightVerticalStack = UIStackView() @@ -70,6 +70,7 @@ import Foundation //leftVerticalStack constraints leftVerticalStack.widthAnchor.constraint(equalTo: rightVerticalStack.widthAnchor, multiplier: 1).isActive = true + leftVerticalStack.heightAnchor.constraint(equalTo: rightVerticalStack.heightAnchor, multiplier: 1).isActive = true leftVerticalStack.setCustomSpacing(stackSpacing, after: leftHeadline1) leftVerticalStack.setCustomSpacing(stackSpacing, after: leftHeadline2) leftVerticalStack.setCustomSpacing(stackSpacing, after: leftBody) From d8c52ab8a63a86ac0cff490a3313c28c681e32ba Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Mon, 16 Mar 2020 11:58:36 -0400 Subject: [PATCH 7/7] fix molecule protocol type Update column molecule to allow for matching heights on each side. --- .../Categories/UIStackView+Extension.swift | 6 +- MVMCoreUI/Legacy/Views/MVMCoreUIPageControl.m | 2 +- .../ListTwoColumnCompareChanges.swift | 88 +++++++++---------- .../LeftRightViews/CornerLabels.swift | 2 +- .../StringAndMoleculeView.swift | 2 +- MVMCoreUI/Organisms/Stack.swift | 2 +- 6 files changed, 47 insertions(+), 55 deletions(-) diff --git a/MVMCoreUI/Categories/UIStackView+Extension.swift b/MVMCoreUI/Categories/UIStackView+Extension.swift index ae3b7ed9..e968fd7c 100644 --- a/MVMCoreUI/Categories/UIStackView+Extension.swift +++ b/MVMCoreUI/Categories/UIStackView+Extension.swift @@ -8,9 +8,7 @@ import Foundation -extension UIStackView: MoleculeViewProtocol { - public func setWithJSON(_ json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable : Any]?) {} - +extension UIStackView: MVMCoreUIMoleculeViewProtocol { public func updateView(_ size: CGFloat) { for view in arrangedSubviews { (view as? MVMCoreViewProtocol)?.updateView(size) @@ -19,7 +17,7 @@ extension UIStackView: MoleculeViewProtocol { public func reset() { for view in arrangedSubviews { - (view as? MoleculeViewProtocol)?.reset?() + (view as? MVMCoreUIMoleculeViewProtocol)?.reset?() } } } diff --git a/MVMCoreUI/Legacy/Views/MVMCoreUIPageControl.m b/MVMCoreUI/Legacy/Views/MVMCoreUIPageControl.m index 9a8f880f..f2b9976e 100644 --- a/MVMCoreUI/Legacy/Views/MVMCoreUIPageControl.m +++ b/MVMCoreUI/Legacy/Views/MVMCoreUIPageControl.m @@ -311,7 +311,7 @@ static CGFloat const IndicatorRectangleHeight = 4; self.currentPage = page; } -#pragma mark - MoleculeViewProtocol +#pragma mark - MVMCoreUIMoleculeViewProtocol - (void)setWithJSON:(NSDictionary *)json delegateObject:(MVMCoreUIDelegateObject *)delegateObject additionalData:(NSDictionary *)additionalData { NSString *colorString = [json string:KeyBackgroundColor]; diff --git a/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChanges.swift b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChanges.swift index 47d65473..c007b8c7 100644 --- a/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChanges.swift +++ b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/TwoColumn/ListTwoColumnCompareChanges.swift @@ -23,9 +23,42 @@ import Foundation let rightHeadline3 = Label.commonLabelB1(true) let rightBody = Label.commonLabelB2(true) let rightLink = Link() - let containerView = View() - let leftVerticalStack = UIStackView() - let rightVerticalStack = UIStackView() + let containingStack: Stack + + //------------------------------------------------------ + // MARK: - Initializers + //------------------------------------------------------ + public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + let stackHeadline1 = Stack.createStack(with: [(view: leftHeadline1, model: StackItemModel(percent: 50, verticalAlignment: .leading)), + (view: rightHeadline1, model: StackItemModel(percent: 50, verticalAlignment: .leading))], + axis: .horizontal) + let stackHeadline2 = Stack.createStack(with: [(view: leftHeadline2, model: StackItemModel(percent: 50, verticalAlignment: .leading)), + (view: rightHeadline2, model: StackItemModel(percent: 50, verticalAlignment: .leading))], + axis: .horizontal) + let stackHeadline3 = Stack.createStack(with: [(view: leftHeadline3, model: StackItemModel(percent: 50, verticalAlignment: .leading)), + (view: rightHeadline3, model: StackItemModel(percent: 50, verticalAlignment: .leading))], + axis: .horizontal) + let stackBody = Stack.createStack(with: [(view: leftBody, model: StackItemModel(percent: 50, verticalAlignment: .leading)), + (view: rightBody, model: StackItemModel(percent: 50, verticalAlignment: .leading))], + axis: .horizontal) + let stackLink = Stack.createStack(with: [(view: leftLink, model: StackItemModel(percent: 50, verticalAlignment: .leading)), + (view: rightLink, model: StackItemModel(percent: 50, verticalAlignment: .leading))], + axis: .horizontal) + containingStack = Stack.createStack(with: [stackHeadline1, + stackHeadline2, + stackHeadline3, + stackBody, + stackLink], + spacing: 0) + containingStack.stackModel?.molecules[1].spacing = 5 + containingStack.stackModel?.molecules[2].spacing = 5 + containingStack.stackModel?.molecules[4].spacing = 5 + super.init(style: style, reuseIdentifier: reuseIdentifier) + } + + public required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } //------------------------------------------------------ // MARK: - Properties @@ -35,50 +68,13 @@ import Foundation //------------------------------------------------------- // MARK: - View Lifecycle //------------------------------------------------------- - open override func updateView(_ size: CGFloat) { - super.updateView(size) - leftLink.updateView(size) - rightLink.updateView(size) - } - open override func setupView() { super.setupView() - containerView.translatesAutoresizingMaskIntoConstraints = false - leftVerticalStack.translatesAutoresizingMaskIntoConstraints = false - rightVerticalStack.translatesAutoresizingMaskIntoConstraints = false - leftVerticalStack.addArrangedSubview(leftHeadline1) - leftVerticalStack.addArrangedSubview(leftHeadline2) - leftVerticalStack.addArrangedSubview(leftHeadline3) - leftVerticalStack.addArrangedSubview(leftBody) - leftVerticalStack.addArrangedSubview(leftLink) - leftVerticalStack.axis = .vertical - leftVerticalStack.alignment = .leading - rightVerticalStack.addArrangedSubview(rightHeadline1) - rightVerticalStack.addArrangedSubview(rightHeadline2) - rightVerticalStack.addArrangedSubview(rightHeadline3) - rightVerticalStack.addArrangedSubview(rightBody) - rightVerticalStack.addArrangedSubview(rightLink) - rightVerticalStack.axis = .vertical - rightVerticalStack.alignment = .leading - containerView.addSubview(leftVerticalStack) - containerView.addSubview(rightVerticalStack) - - //containerView constraints - contentView.addSubview(containerView) - containerHelper.constrainView(containerView) - NSLayoutConstraint.pinViews(leftView: leftVerticalStack, rightView: rightVerticalStack, alignTop: true) - - //leftVerticalStack constraints - leftVerticalStack.widthAnchor.constraint(equalTo: rightVerticalStack.widthAnchor, multiplier: 1).isActive = true - leftVerticalStack.heightAnchor.constraint(equalTo: rightVerticalStack.heightAnchor, multiplier: 1).isActive = true - leftVerticalStack.setCustomSpacing(stackSpacing, after: leftHeadline1) - leftVerticalStack.setCustomSpacing(stackSpacing, after: leftHeadline2) - leftVerticalStack.setCustomSpacing(stackSpacing, after: leftBody) - - //rightVerticalStack constraints - rightVerticalStack.setCustomSpacing(stackSpacing, after: rightHeadline1) - rightVerticalStack.setCustomSpacing(stackSpacing, after: rightHeadline2) - rightVerticalStack.setCustomSpacing(stackSpacing, after: rightBody) + addMolecule(containingStack) + for molecule in containingStack.stackItems { + ((molecule as? StackItem)?.view as? Stack)?.restack() + } + containingStack.restack() } //------------------------------------------------------ @@ -105,12 +101,10 @@ import Foundation leftHeadline2.styleB1(true) leftHeadline3.styleB1(true) leftBody.styleB2(true) - leftLink.reset() rightHeadline1.styleB1(true) rightHeadline2.styleB1(true) rightHeadline3.styleB1(true) rightBody.styleB2(true) - rightLink.reset() } public override class func estimatedHeight(with molecule: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat { diff --git a/MVMCoreUI/Molecules/LeftRightViews/CornerLabels.swift b/MVMCoreUI/Molecules/LeftRightViews/CornerLabels.swift index f7ae36de..bbdda6af 100644 --- a/MVMCoreUI/Molecules/LeftRightViews/CornerLabels.swift +++ b/MVMCoreUI/Molecules/LeftRightViews/CornerLabels.swift @@ -152,7 +152,7 @@ import UIKit styleDefault() spaceAboveMolecule = 6.0 spaceBelowMolecule = 6.0 - (middleView as? MoleculeViewProtocol)?.reset?() + (middleView as? MVMCoreUIMoleculeViewProtocol)?.reset?() } func styleDefault() { diff --git a/MVMCoreUI/Molecules/VerticalCombinationViews/Lists/StringAndMoleculeStack/StringAndMoleculeView.swift b/MVMCoreUI/Molecules/VerticalCombinationViews/Lists/StringAndMoleculeStack/StringAndMoleculeView.swift index 95392b8d..09ed8a7b 100644 --- a/MVMCoreUI/Molecules/VerticalCombinationViews/Lists/StringAndMoleculeStack/StringAndMoleculeView.swift +++ b/MVMCoreUI/Molecules/VerticalCombinationViews/Lists/StringAndMoleculeStack/StringAndMoleculeView.swift @@ -73,7 +73,7 @@ open class StringAndMoleculeView: View { override open func reset() { super.reset() label.reset() - (molecule as? MoleculeViewProtocol)?.reset?() + (molecule as? MVMCoreUIMoleculeViewProtocol)?.reset?() } public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { diff --git a/MVMCoreUI/Organisms/Stack.swift b/MVMCoreUI/Organisms/Stack.swift index 696964f1..8fa220ec 100644 --- a/MVMCoreUI/Organisms/Stack.swift +++ b/MVMCoreUI/Organisms/Stack.swift @@ -135,7 +135,7 @@ open class Stack: Container where T: (StackModelProtocol & MoleculeModelProto super.reset() backgroundColor = .clear for item in stackItems { - (item as? MoleculeViewProtocol)?.reset?() + (item as? MVMCoreUIMoleculeViewProtocol)?.reset?() } }