Merge branch 'develop' into feature/swiftified_textField
# Conflicts: # MVMCoreUI.xcodeproj/project.pbxproj # MVMCoreUI/Atoms/Views/CaretView.swift # MVMCoreUI/Molecules/Items/TableViewCell.swift
This commit is contained in:
commit
f19d45b865
@ -53,9 +53,8 @@
|
||||
943784F6236B77BB006A1E82 /* GraphViewAnimationHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 943784F4236B77BB006A1E82 /* GraphViewAnimationHandler.swift */; };
|
||||
9455B19C234F8A0400A574DB /* MVMAnimationFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9455B19B234F8A0400A574DB /* MVMAnimationFramework.framework */; };
|
||||
948DB67E2326DCD90011F916 /* MultiProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 948DB67D2326DCD90011F916 /* MultiProgress.swift */; };
|
||||
D206997721FB8A0B00CAE0DE /* MVMCoreUINavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = D206997521FB8A0B00CAE0DE /* MVMCoreUINavigationController.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
D206997821FB8A0B00CAE0DE /* MVMCoreUINavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = D206997621FB8A0B00CAE0DE /* MVMCoreUINavigationController.m */; };
|
||||
D20A9A5E2243D3E300ADE781 /* TwoButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D20A9A5D2243D3E300ADE781 /* TwoButtonView.swift */; };
|
||||
D213347723843825008E41B3 /* Line.swift in Sources */ = {isa = PBXBuildFile; fileRef = D213347623843825008E41B3 /* Line.swift */; };
|
||||
D224798A2314445E003FCCF9 /* LabelSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22479892314445E003FCCF9 /* LabelSwitch.swift */; };
|
||||
D224798C231450C8003FCCF9 /* HeadlineBodySwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D224798B231450C8003FCCF9 /* HeadlineBodySwitch.swift */; };
|
||||
D22479942316AE5E003FCCF9 /* NSLayoutConstraintExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22479932316AE5E003FCCF9 /* NSLayoutConstraintExtension.swift */; };
|
||||
@ -79,8 +78,6 @@
|
||||
D282AAB4223FDDAE00C46919 /* MFLoadImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D282AAB3223FDDAE00C46919 /* MFLoadImageView.swift */; };
|
||||
D282AABA224131D100C46919 /* MFTransparentGIFView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D282AAB9224131D100C46919 /* MFTransparentGIFView.swift */; };
|
||||
D282AACB2243C61700C46919 /* ButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D282AACA2243C61700C46919 /* ButtonView.swift */; };
|
||||
D28B4F8A21FF967C00712C7A /* MVMCoreUIObject.h in Headers */ = {isa = PBXBuildFile; fileRef = D28B4F8821FF967C00712C7A /* MVMCoreUIObject.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
D28B4F8B21FF967C00712C7A /* MVMCoreUIObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D28B4F8921FF967C00712C7A /* MVMCoreUIObject.m */; };
|
||||
D296E13C229598BF0051EBE7 /* MoleculeListCellProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = D296E13B2295969C0051EBE7 /* MoleculeListCellProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
D296E1412295EBBA0051EBE7 /* MoleculeDelegateProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = D296E1402295EBBA0051EBE7 /* MoleculeDelegateProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
D296E14722A5984C0051EBE7 /* MVMCoreUIViewConstrainingProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = D296E14622A597490051EBE7 /* MVMCoreUIViewConstrainingProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
@ -198,6 +195,8 @@
|
||||
D2A6390522CBCE160052ED1F /* MoleculeCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2A6390422CBCE160052ED1F /* MoleculeCollectionViewCell.swift */; };
|
||||
D2B18B7F2360913400A9AEDC /* Control.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2B18B7E2360913400A9AEDC /* Control.swift */; };
|
||||
D2B18B812360945C00A9AEDC /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2B18B802360945C00A9AEDC /* View.swift */; };
|
||||
D2B18B922361E65A00A9AEDC /* CoreUIObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2B18B912361E65A00A9AEDC /* CoreUIObject.swift */; };
|
||||
D2B18B94236214AD00A9AEDC /* NavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2B18B93236214AD00A9AEDC /* NavigationController.swift */; };
|
||||
D2B1E3E522F37D6A0065F95C /* ImageHeadlineBody.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2B1E3E422F37D6A0065F95C /* ImageHeadlineBody.swift */; };
|
||||
D2C5001821F8ECDD001DA659 /* MVMCoreUIViewControllerMappingObject.h in Headers */ = {isa = PBXBuildFile; fileRef = D2C5001621F8ECDD001DA659 /* MVMCoreUIViewControllerMappingObject.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
D2C5001921F8ECDD001DA659 /* MVMCoreUIViewControllerMappingObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D2C5001721F8ECDD001DA659 /* MVMCoreUIViewControllerMappingObject.m */; };
|
||||
@ -249,9 +248,8 @@
|
||||
943784F4236B77BB006A1E82 /* GraphViewAnimationHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GraphViewAnimationHandler.swift; sourceTree = "<group>"; };
|
||||
9455B19B234F8A0400A574DB /* MVMAnimationFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MVMAnimationFramework.framework; path = ../SharedFrameworks/MVMAnimationFramework.framework; sourceTree = "<group>"; };
|
||||
948DB67D2326DCD90011F916 /* MultiProgress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultiProgress.swift; sourceTree = "<group>"; };
|
||||
D206997521FB8A0B00CAE0DE /* MVMCoreUINavigationController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MVMCoreUINavigationController.h; sourceTree = "<group>"; };
|
||||
D206997621FB8A0B00CAE0DE /* MVMCoreUINavigationController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MVMCoreUINavigationController.m; sourceTree = "<group>"; };
|
||||
D20A9A5D2243D3E300ADE781 /* TwoButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TwoButtonView.swift; sourceTree = "<group>"; };
|
||||
D213347623843825008E41B3 /* Line.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Line.swift; sourceTree = "<group>"; };
|
||||
D22479892314445E003FCCF9 /* LabelSwitch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelSwitch.swift; sourceTree = "<group>"; };
|
||||
D224798B231450C8003FCCF9 /* HeadlineBodySwitch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadlineBodySwitch.swift; sourceTree = "<group>"; };
|
||||
D22479932316AE5E003FCCF9 /* NSLayoutConstraintExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSLayoutConstraintExtension.swift; sourceTree = "<group>"; };
|
||||
@ -275,8 +273,6 @@
|
||||
D282AAB3223FDDAE00C46919 /* MFLoadImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MFLoadImageView.swift; sourceTree = "<group>"; };
|
||||
D282AAB9224131D100C46919 /* MFTransparentGIFView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MFTransparentGIFView.swift; sourceTree = "<group>"; };
|
||||
D282AACA2243C61700C46919 /* ButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonView.swift; sourceTree = "<group>"; };
|
||||
D28B4F8821FF967C00712C7A /* MVMCoreUIObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MVMCoreUIObject.h; sourceTree = "<group>"; };
|
||||
D28B4F8921FF967C00712C7A /* MVMCoreUIObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MVMCoreUIObject.m; sourceTree = "<group>"; };
|
||||
D296E13B2295969C0051EBE7 /* MoleculeListCellProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MoleculeListCellProtocol.h; sourceTree = "<group>"; };
|
||||
D296E1402295EBBA0051EBE7 /* MoleculeDelegateProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MoleculeDelegateProtocol.h; sourceTree = "<group>"; };
|
||||
D296E14622A597490051EBE7 /* MVMCoreUIViewConstrainingProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MVMCoreUIViewConstrainingProtocol.h; sourceTree = "<group>"; };
|
||||
@ -409,6 +405,8 @@
|
||||
D2A6390422CBCE160052ED1F /* MoleculeCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoleculeCollectionViewCell.swift; sourceTree = "<group>"; };
|
||||
D2B18B7E2360913400A9AEDC /* Control.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Control.swift; sourceTree = "<group>"; };
|
||||
D2B18B802360945C00A9AEDC /* View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = View.swift; sourceTree = "<group>"; };
|
||||
D2B18B912361E65A00A9AEDC /* CoreUIObject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreUIObject.swift; sourceTree = "<group>"; };
|
||||
D2B18B93236214AD00A9AEDC /* NavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationController.swift; sourceTree = "<group>"; };
|
||||
D2B1E3E422F37D6A0065F95C /* ImageHeadlineBody.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageHeadlineBody.swift; sourceTree = "<group>"; };
|
||||
D2C5001621F8ECDD001DA659 /* MVMCoreUIViewControllerMappingObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MVMCoreUIViewControllerMappingObject.h; sourceTree = "<group>"; };
|
||||
D2C5001721F8ECDD001DA659 /* MVMCoreUIViewControllerMappingObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MVMCoreUIViewControllerMappingObject.m; sourceTree = "<group>"; };
|
||||
@ -417,6 +415,7 @@
|
||||
D2E1FADA2260D3D200AEFD8C /* MVMCoreUIDelegateObject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MVMCoreUIDelegateObject.swift; sourceTree = "<group>"; };
|
||||
D2E1FADE2268B8E700AEFD8C /* ThreeLayerTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreeLayerTableViewController.swift; sourceTree = "<group>"; };
|
||||
D2E1FAE02268E81D00AEFD8C /* MoleculeListTemplate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoleculeListTemplate.swift; sourceTree = "<group>"; };
|
||||
D2F4DDE52371A4CB00CD28BB /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
|
||||
DB06250A2293456500B72DD3 /* LeftRightLabelView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LeftRightLabelView.swift; sourceTree = "<group>"; };
|
||||
DB891E822253FA8500022516 /* Label.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Label.swift; sourceTree = "<group>"; };
|
||||
DBC4391622442196001AB423 /* CaretView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CaretView.swift; sourceTree = "<group>"; };
|
||||
@ -457,6 +456,32 @@
|
||||
path = views;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D213347423842FE3008E41B3 /* Controllers */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D29DF29321E7ADB8003B2FB9 /* StackableViewController.h */,
|
||||
D29DF28E21E7ADB8003B2FB9 /* StackableViewController.m */,
|
||||
D29770F021F7C6D600B2F0D0 /* TopLabelsAndBottomButtonsViewController.h */,
|
||||
D29770F121F7C6D600B2F0D0 /* TopLabelsAndBottomButtonsViewController.m */,
|
||||
D29770EF21F7C6D600B2F0D0 /* TopLabelsAndBottomButtonsTableViewController.h */,
|
||||
D29770EE21F7C6D600B2F0D0 /* TopLabelsAndBottomButtonsTableViewController.m */,
|
||||
);
|
||||
path = Controllers;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D213347523842FF5008E41B3 /* Views */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D29DF17E21E69E2E003B2FB9 /* MFView.h */,
|
||||
D29DF17F21E69E2E003B2FB9 /* MFView.m */,
|
||||
D29DF31E21ED0CBA003B2FB9 /* LabelView.h */,
|
||||
D29DF31F21ED0CBA003B2FB9 /* LabelView.m */,
|
||||
D29DF15921E697DA003B2FB9 /* SeparatorView.h */,
|
||||
D29DF15A21E697DA003B2FB9 /* SeparatorView.m */,
|
||||
);
|
||||
path = Views;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D224798823142BF2003FCCF9 /* SwitchMolecules */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@ -516,17 +541,13 @@
|
||||
path = Items;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D22D1F582204D2590077CEC0 /* LegacyControllers */ = {
|
||||
D22D1F582204D2590077CEC0 /* Legacy */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D29DF29321E7ADB8003B2FB9 /* StackableViewController.h */,
|
||||
D29DF28E21E7ADB8003B2FB9 /* StackableViewController.m */,
|
||||
D29770F021F7C6D600B2F0D0 /* TopLabelsAndBottomButtonsViewController.h */,
|
||||
D29770F121F7C6D600B2F0D0 /* TopLabelsAndBottomButtonsViewController.m */,
|
||||
D29770EF21F7C6D600B2F0D0 /* TopLabelsAndBottomButtonsTableViewController.h */,
|
||||
D29770EE21F7C6D600B2F0D0 /* TopLabelsAndBottomButtonsTableViewController.m */,
|
||||
D213347523842FF5008E41B3 /* Views */,
|
||||
D213347423842FE3008E41B3 /* Controllers */,
|
||||
);
|
||||
path = LegacyControllers;
|
||||
path = Legacy;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D29DF0C221E404D4003B2FB9 = {
|
||||
@ -557,7 +578,7 @@
|
||||
D29DF13321E68604003B2FB9 /* Styles */,
|
||||
D29DF11021E6805F003B2FB9 /* Categories */,
|
||||
D29DF11921E68467003B2FB9 /* Containers */,
|
||||
D22D1F582204D2590077CEC0 /* LegacyControllers */,
|
||||
D22D1F582204D2590077CEC0 /* Legacy */,
|
||||
D29DF10F21E67A7D003B2FB9 /* BaseControllers */,
|
||||
D29DF11E21E6851E003B2FB9 /* TopAlert */,
|
||||
D29DF10D21E67A70003B2FB9 /* Atoms */,
|
||||
@ -642,6 +663,7 @@
|
||||
D29DF2CD21E7C104003B2FB9 /* MFLoadingViewController.m */,
|
||||
D2A5146A2214905000345BFB /* ThreeLayerViewController.swift */,
|
||||
D2E1FADE2268B8E700AEFD8C /* ThreeLayerTableViewController.swift */,
|
||||
D2F4DDE52371A4CB00CD28BB /* ViewController.swift */,
|
||||
);
|
||||
path = BaseControllers;
|
||||
sourceTree = "<group>";
|
||||
@ -664,8 +686,7 @@
|
||||
0ABD1369237B18EE0081388D /* views */,
|
||||
D29DF2B721E7BE79003B2FB9 /* TabBarController */,
|
||||
D29DF2B621E7BE66003B2FB9 /* SplitViewController */,
|
||||
D206997521FB8A0B00CAE0DE /* MVMCoreUINavigationController.h */,
|
||||
D206997621FB8A0B00CAE0DE /* MVMCoreUINavigationController.m */,
|
||||
D2B18B93236214AD00A9AEDC /* NavigationController.swift */,
|
||||
);
|
||||
path = Containers;
|
||||
sourceTree = "<group>";
|
||||
@ -752,19 +773,14 @@
|
||||
DBC4391622442196001AB423 /* CaretView.swift */,
|
||||
DBC4391722442197001AB423 /* DashLine.swift */,
|
||||
DB06250A2293456500B72DD3 /* LeftRightLabelView.swift */,
|
||||
D29DF17E21E69E2E003B2FB9 /* MFView.h */,
|
||||
D29DF17F21E69E2E003B2FB9 /* MFView.m */,
|
||||
D29DF31E21ED0CBA003B2FB9 /* LabelView.h */,
|
||||
D29DF31F21ED0CBA003B2FB9 /* LabelView.m */,
|
||||
D29DF28721E7AC2B003B2FB9 /* ViewConstrainingView.h */,
|
||||
D29DF28821E7AC2B003B2FB9 /* ViewConstrainingView.m */,
|
||||
D282AAB9224131D100C46919 /* MFTransparentGIFView.swift */,
|
||||
D282AAB3223FDDAE00C46919 /* MFLoadImageView.swift */,
|
||||
D213347623843825008E41B3 /* Line.swift */,
|
||||
D29DF2AD21E7B3A4003B2FB9 /* MFTextView.h */,
|
||||
D29DF2AB21E7B3A4003B2FB9 /* MFTextView.m */,
|
||||
D29DF2AC21E7B3A4003B2FB9 /* MFTextView.xib */,
|
||||
D29DF15921E697DA003B2FB9 /* SeparatorView.h */,
|
||||
D29DF15A21E697DA003B2FB9 /* SeparatorView.m */,
|
||||
D29DF2B121E7B76C003B2FB9 /* MFLoadingSpinner.h */,
|
||||
D29DF2B221E7B76D003B2FB9 /* MFLoadingSpinner.m */,
|
||||
D29DF32321ED0DA2003B2FB9 /* TextButtonView.h */,
|
||||
@ -839,8 +855,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D2E1FADA2260D3D200AEFD8C /* MVMCoreUIDelegateObject.swift */,
|
||||
D28B4F8821FF967C00712C7A /* MVMCoreUIObject.h */,
|
||||
D28B4F8921FF967C00712C7A /* MVMCoreUIObject.m */,
|
||||
D2B18B912361E65A00A9AEDC /* CoreUIObject.swift */,
|
||||
D29DF27721E7A533003B2FB9 /* MVMCoreUISession.h */,
|
||||
D29DF27821E7A533003B2FB9 /* MVMCoreUISession.m */,
|
||||
D29DF27321E79E81003B2FB9 /* MVMCoreUILoggingHandler.h */,
|
||||
@ -932,7 +947,6 @@
|
||||
D260D7B622D68514007E7233 /* MVMCoreUIPagingProtocol.h in Headers */,
|
||||
D29DF18021E69E49003B2FB9 /* MFView.h in Headers */,
|
||||
D29DF27921E7A533003B2FB9 /* MVMCoreUISession.h in Headers */,
|
||||
D206997721FB8A0B00CAE0DE /* MVMCoreUINavigationController.h in Headers */,
|
||||
D29DF29D21E7AE38003B2FB9 /* MFStyler.h in Headers */,
|
||||
D29DF2B021E7B3A4003B2FB9 /* MFTextView.h in Headers */,
|
||||
D29DF2A921E7B2F9003B2FB9 /* MVMCoreUIConstants.h in Headers */,
|
||||
@ -976,7 +990,6 @@
|
||||
D29DF13121E6851E003B2FB9 /* MVMCoreUITopAlertExpandableView.h in Headers */,
|
||||
D29DF2C421E7BF57003B2FB9 /* MFTabBarSwipeAnimator.h in Headers */,
|
||||
D2A5145D2211D22A00345BFB /* MVMCoreUIMoleculeViewProtocol.h in Headers */,
|
||||
D28B4F8A21FF967C00712C7A /* MVMCoreUIObject.h in Headers */,
|
||||
D29DF2CA21E7BFC8003B2FB9 /* MFSizeThreshold.h in Headers */,
|
||||
D29DF28021E7AA51003B2FB9 /* MVMCoreUIDetailViewProtocol.h in Headers */,
|
||||
D29DF2BD21E7BEA4003B2FB9 /* MVMCoreUITabBarPageControlViewController.h in Headers */,
|
||||
@ -1119,6 +1132,7 @@
|
||||
D2755D7B23689C7500485468 /* TableViewCell.swift in Sources */,
|
||||
0A21DB85235E06EF00C160A2 /* MFTextField.m in Sources */,
|
||||
D282AABA224131D100C46919 /* MFTransparentGIFView.swift in Sources */,
|
||||
D213347723843825008E41B3 /* Line.swift in Sources */,
|
||||
D2A514672213885800345BFB /* StandardHeaderView.swift in Sources */,
|
||||
DBEFFA04225A829700230692 /* Label.swift in Sources */,
|
||||
D2D6CD4022E78C1A00D701B8 /* Scroller.swift in Sources */,
|
||||
@ -1133,6 +1147,7 @@
|
||||
D29DF26D21E6AA0B003B2FB9 /* FLAnimatedImageView.m in Sources */,
|
||||
D29DF2EF21ECEAE1003B2FB9 /* MFFonts.m in Sources */,
|
||||
D22479942316AE5E003FCCF9 /* NSLayoutConstraintExtension.swift in Sources */,
|
||||
D2B18B94236214AD00A9AEDC /* NavigationController.swift in Sources */,
|
||||
D282AACB2243C61700C46919 /* ButtonView.swift in Sources */,
|
||||
D2D6CD4222E78FAB00D701B8 /* ThreeLayerTemplate.swift in Sources */,
|
||||
0105618F224BBE7700E1557D /* FormValidator+FormParams.swift in Sources */,
|
||||
@ -1147,7 +1162,6 @@
|
||||
D274CA332236A78900B01B62 /* StandardFooterView.swift in Sources */,
|
||||
D29DF2BF21E7BEA4003B2FB9 /* MVMCoreUITabBarPageControlViewController.m in Sources */,
|
||||
D29DF28321E7AB24003B2FB9 /* MVMCoreUICommonViewsUtility.m in Sources */,
|
||||
D206997821FB8A0B00CAE0DE /* MVMCoreUINavigationController.m in Sources */,
|
||||
D29DF27A21E7A533003B2FB9 /* MVMCoreUISession.m in Sources */,
|
||||
01DF55E021F8FAA800CC099B /* MFTextFieldListView.swift in Sources */,
|
||||
D2A5146B2214905000345BFB /* ThreeLayerViewController.swift in Sources */,
|
||||
@ -1193,6 +1207,7 @@
|
||||
D29DF29C21E7ADB9003B2FB9 /* MFProgrammaticTableViewController.m in Sources */,
|
||||
0105618E224BBE7700E1557D /* FormValidator+TextFields.swift in Sources */,
|
||||
0A1214A022C11A18007C7030 /* ActionDetailWithImage.swift in Sources */,
|
||||
D2B18B922361E65A00A9AEDC /* CoreUIObject.swift in Sources */,
|
||||
D29DF2BE21E7BEA4003B2FB9 /* TopTabbar.m in Sources */,
|
||||
0ABD136B237B193A0081388D /* FormFieldContainer.swift in Sources */,
|
||||
D2A514632213643100345BFB /* MoleculeStackCenteredTemplate.swift in Sources */,
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
//
|
||||
|
||||
|
||||
@objcMembers open class CaretView: MFView {
|
||||
open class CaretView: View {
|
||||
//------------------------------------------------------
|
||||
// MARK: - Properties
|
||||
//------------------------------------------------------
|
||||
@ -178,7 +178,7 @@
|
||||
//------------------------------------------------------
|
||||
|
||||
// Default values for view.
|
||||
@objc open override func setAsMolecule() {
|
||||
@objc open func setAsMolecule() {
|
||||
defaultState()
|
||||
}
|
||||
|
||||
@ -203,12 +203,14 @@
|
||||
self.lineWidth = lineWidth
|
||||
}
|
||||
}
|
||||
|
||||
@objc open override func needsToBeConstrained() -> Bool {
|
||||
}
|
||||
|
||||
extension CaretView: MVMCoreUIViewConstrainingProtocol {
|
||||
open func needsToBeConstrained() -> Bool {
|
||||
return true
|
||||
}
|
||||
|
||||
@objc open override func alignment() -> UIStackView.Alignment {
|
||||
return .leading
|
||||
open func alignment() -> UIStackView.Alignment {
|
||||
return UIStackView.Alignment.leading;
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
import MVMCore
|
||||
|
||||
|
||||
open class DashLine: MFView {
|
||||
open class DashLine: View {
|
||||
//------------------------------------------------------
|
||||
// MARK: - Properties
|
||||
//------------------------------------------------------
|
||||
@ -75,8 +75,7 @@ open class DashLine: MFView {
|
||||
//------------------------------------------------------
|
||||
|
||||
// Default values for view.
|
||||
@objc open override func setAsMolecule() {
|
||||
|
||||
@objc open func setAsMolecule() {
|
||||
backgroundColor = .clear
|
||||
isHidden = false
|
||||
}
|
||||
|
||||
@ -109,7 +109,7 @@ public struct GraphObject {
|
||||
}
|
||||
|
||||
|
||||
@objcMembers open class GraphView: View {
|
||||
@objcMembers open class GraphView: View, MVMCoreUIViewConstrainingProtocol {
|
||||
|
||||
var heightConstraint: NSLayoutConstraint?
|
||||
var gradientLayer: CALayer?
|
||||
@ -240,6 +240,10 @@ public struct GraphObject {
|
||||
|
||||
return containLayer
|
||||
}
|
||||
//MARK: MVMCoreUIViewConstrainingProtocol
|
||||
public func needsToBeConstrained() -> Bool {
|
||||
return true
|
||||
}
|
||||
|
||||
//MARK: Animation
|
||||
func rotationAnimation(_ object: GraphObject) {
|
||||
|
||||
@ -85,7 +85,6 @@ public typealias ActionBlock = () -> ()
|
||||
//------------------------------------------------------
|
||||
|
||||
@objc public func setupView() {
|
||||
|
||||
backgroundColor = .clear
|
||||
numberOfLines = 0
|
||||
lineBreakMode = .byWordWrapping
|
||||
|
||||
106
MVMCoreUI/Atoms/Views/Line.swift
Normal file
106
MVMCoreUI/Atoms/Views/Line.swift
Normal file
@ -0,0 +1,106 @@
|
||||
//
|
||||
// Line.swift
|
||||
// MVMCoreUI
|
||||
//
|
||||
// Created by Scott Pfeil on 11/19/19.
|
||||
// Copyright © 2019 Verizon Wireless. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
@objcMembers open class Line: View {
|
||||
|
||||
public var heightConstraint: NSLayoutConstraint?
|
||||
|
||||
public enum Style: String, Codable {
|
||||
case standard
|
||||
case thin
|
||||
case medium
|
||||
case heavy
|
||||
case none
|
||||
}
|
||||
|
||||
public var style = Style.standard {
|
||||
didSet {
|
||||
switch style {
|
||||
case .standard:
|
||||
heightConstraint?.constant = 1
|
||||
backgroundColor = .mfSilver()
|
||||
case .thin:
|
||||
heightConstraint?.constant = 1
|
||||
backgroundColor = .black
|
||||
case .medium:
|
||||
heightConstraint?.constant = 2
|
||||
backgroundColor = .black
|
||||
case .heavy:
|
||||
heightConstraint?.constant = 4
|
||||
backgroundColor = .black
|
||||
case .none:
|
||||
heightConstraint?.constant = 0
|
||||
}
|
||||
setNeedsLayout()
|
||||
layoutIfNeeded()
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Helpers
|
||||
open func shouldBeVisible() -> Bool {
|
||||
guard let type = json?.optionalStringForKey(KeyType) else { return false }
|
||||
return type != "none"
|
||||
}
|
||||
|
||||
public convenience init(pinTo view: UIView, edge: UIRectEdge, useMargin: Bool) {
|
||||
self.init(frame: .zero)
|
||||
view.addSubview(self)
|
||||
NSLayoutConstraint.activate(Array(NSLayoutConstraint.pinView(toSuperview: self, useMargins: useMargin, pinTop: edge != .bottom, pinBottom: edge != .top, pinLeft: edge != .right, pinRight: edge != .left).values))
|
||||
}
|
||||
|
||||
// MARK: - MVMCoreViewProtocol
|
||||
open override func setupView() {
|
||||
super.setupView()
|
||||
backgroundColor = .black
|
||||
heightConstraint = heightAnchor.constraint(equalToConstant: 1)
|
||||
heightConstraint?.isActive = true
|
||||
}
|
||||
|
||||
// MARK: - MVMCoreUIMoleculeViewProtocol
|
||||
open override func setWithJSON(_ json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable : Any]?) {
|
||||
|
||||
// If no type, default to standard.
|
||||
if let typeString = json?.optionalStringForKey(KeyType), let type = Style.init(rawValue: typeString) {
|
||||
style = type
|
||||
} else {
|
||||
style = .standard
|
||||
}
|
||||
|
||||
super.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData)
|
||||
}
|
||||
|
||||
open override func reset() {
|
||||
style = .standard
|
||||
}
|
||||
|
||||
open func copyBackgroundColor() -> Bool {
|
||||
return false
|
||||
}
|
||||
|
||||
public static func estimatedHeight(forRow json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat {
|
||||
guard let type = json?.optionalStringForKey(KeyType), let style = Style(rawValue: type) else { return 1 }
|
||||
switch style {
|
||||
case .none:
|
||||
return 0
|
||||
case .medium:
|
||||
return 2
|
||||
case .heavy:
|
||||
return 4
|
||||
default:
|
||||
return 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension Line: MVMCoreUIViewConstrainingProtocol {
|
||||
open func needsToBeConstrained() -> Bool {
|
||||
return true
|
||||
}
|
||||
}
|
||||
@ -228,7 +228,9 @@ static const CGFloat CheckBoxHeightWidth = 18.0;
|
||||
NSDictionary *constraints = [NSLayoutConstraint constraintPinView:checkedSquare heightConstraint:YES heightConstant:size widthConstraint:YES widthConstant:size];
|
||||
self.checkboxWidth = constraints[ConstraintWidth];
|
||||
self.checkboxHeight = constraints[ConstraintHeight];
|
||||
[NSLayoutConstraint constraintPinSubview:checkedSquare pinTop:YES pinBottom:YES pinLeft:YES pinRight:NO];
|
||||
[NSLayoutConstraint constraintPinSubview:checkedSquare pinTop:NO pinBottom:NO pinLeft:YES pinRight:NO];
|
||||
[checkedSquare.topAnchor constraintGreaterThanOrEqualToAnchor:containterView.topAnchor].active = YES;
|
||||
[containterView.bottomAnchor constraintGreaterThanOrEqualToAnchor:checkedSquare.bottomAnchor].active = YES;
|
||||
|
||||
self.checkboxRightPinConstraint = [checkedSquare.trailingAnchor constraintEqualToAnchor:containterView.trailingAnchor];
|
||||
|
||||
@ -255,7 +257,7 @@ static const CGFloat CheckBoxHeightWidth = 18.0;
|
||||
Label *descriptionLabel = [Label commonLabelB2:YES];
|
||||
[containterView addSubview:descriptionLabel];
|
||||
[NSLayoutConstraint constraintPinSubview:descriptionLabel pinCenterX:NO pinCenterY:YES];
|
||||
[NSLayoutConstraint constraintPinSubview:descriptionLabel pinTop:NO pinBottom:NO pinLeft:NO pinRight:YES];
|
||||
[NSLayoutConstraint constraintPinSubview:descriptionLabel pinTop:YES pinBottom:YES pinLeft:NO pinRight:YES];
|
||||
|
||||
self.descriptionLabelLeadingConstraint = [NSLayoutConstraint constraintWithItem:descriptionLabel attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.checkedSquare attribute:NSLayoutAttributeTrailing multiplier:1 constant:11];
|
||||
self.descriptionLabelLeadingConstraint.active = YES;
|
||||
|
||||
@ -34,7 +34,7 @@ import UIKit
|
||||
}
|
||||
}
|
||||
|
||||
@objcMembers open class MultiProgress: MFView {
|
||||
@objcMembers open class MultiProgress: View {
|
||||
///passing value to progressList creates corresponding progress bars
|
||||
var progressList: Array<ProgressBarObject>? {
|
||||
didSet {
|
||||
@ -49,7 +49,7 @@ import UIKit
|
||||
guard progressObject.progress > 0.0 else {
|
||||
continue
|
||||
}
|
||||
let view = MFView(frame: .zero)
|
||||
let view = UIView(frame: .zero)
|
||||
view.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(view)
|
||||
view.backgroundColor = progressObject.color
|
||||
|
||||
@ -35,7 +35,6 @@
|
||||
#import "MVMCoreUISession.h"
|
||||
#import "MVMCoreUILoggingHandler.h"
|
||||
#import "MVMCoreUITabBarPageControlViewController.h"
|
||||
#import "MVMCoreUINavigationController.h"
|
||||
#import <MVMCoreUI/MVMCoreUI-Swift.h>
|
||||
@import MVMAnimationFramework;
|
||||
|
||||
|
||||
@ -62,6 +62,8 @@ extern NSString * _Nonnull const ConstraintWidth;
|
||||
#pragma mark - With Margins
|
||||
|
||||
+ (nonnull NSDictionary <NSString *, NSLayoutConstraint *>*)pinViewToSuperview:(nonnull UIView *)subview useMargins:(BOOL)useMargins;
|
||||
+ (nonnull NSDictionary <NSString *, NSLayoutConstraint *>*)pinViewToSuperview:(nonnull UIView *)subview useMargins:(BOOL)useMargins pinTop:(BOOL)pinTop pinBottom:(BOOL)pinBottom pinLeft:(BOOL)pinLeft pinRight:(BOOL)pinRight;
|
||||
+ (nonnull NSDictionary <NSString *, NSLayoutConstraint *>*)pinViewToSuperview:(nonnull UIView *)subview useMargins:(BOOL)useMargins pinTop:(BOOL)pinTop topConstant:(CGFloat)topConstant pinBottom:(BOOL)pinBottom bottomConstant:(CGFloat)bottomConstant pinLeft:(BOOL)pinLeft leftConstant:(CGFloat)leftConstant pinRight:(BOOL)pinRight rightConstant:(CGFloat)rightConstant;
|
||||
+ (nonnull NSLayoutConstraint *)pinViewTopToSuperview:(nonnull UIView *)view useMargins:(BOOL)useMargins constant:(CGFloat)constant;
|
||||
+ (nonnull NSLayoutConstraint *)pinViewLeftToSuperview:(nonnull UIView *)view useMargins:(BOOL)useMargins constant:(CGFloat)constant;
|
||||
+ (nonnull NSLayoutConstraint *)pinViewRightToSuperview:(nonnull UIView *)view useMargins:(BOOL)useMargins constant:(CGFloat)constant;
|
||||
|
||||
@ -161,11 +161,28 @@ NSString *const ConstraintWidth = @"width";
|
||||
#pragma mark - With Margins
|
||||
|
||||
+ (nonnull NSDictionary *)pinViewToSuperview:(nonnull UIView *)subview useMargins:(BOOL)useMargins {
|
||||
return @{ConstraintTop:[self pinViewTopToSuperview:subview useMargins:useMargins constant:0],
|
||||
ConstraintLeading:[self pinViewLeftToSuperview:subview useMargins:useMargins constant:0],
|
||||
ConstraintTrailing:[self pinViewRightToSuperview:subview useMargins:useMargins constant:0],
|
||||
ConstraintBot:[self pinViewBottomToSuperview:subview useMargins:useMargins constant:0],
|
||||
};
|
||||
return [NSLayoutConstraint pinViewToSuperview:subview useMargins:useMargins pinTop:YES topConstant:0 pinBottom:YES bottomConstant:0 pinLeft:YES leftConstant:0 pinRight:YES rightConstant:0];
|
||||
}
|
||||
|
||||
+ (nonnull NSDictionary *)pinViewToSuperview:(nonnull UIView *)subview useMargins:(BOOL)useMargins pinTop:(BOOL)pinTop pinBottom:(BOOL)pinBottom pinLeft:(BOOL)pinLeft pinRight:(BOOL)pinRight {
|
||||
return [NSLayoutConstraint pinViewToSuperview:subview useMargins:useMargins pinTop:pinTop topConstant:0 pinBottom:pinBottom bottomConstant:0 pinLeft:pinLeft leftConstant:0 pinRight:pinRight rightConstant:0];
|
||||
}
|
||||
|
||||
+ (NSDictionary *)pinViewToSuperview:(UIView *)subview useMargins:(BOOL)useMargins pinTop:(BOOL)pinTop topConstant:(CGFloat)topConstant pinBottom:(BOOL)pinBottom bottomConstant:(CGFloat)bottomConstant pinLeft:(BOOL)pinLeft leftConstant:(CGFloat)leftConstant pinRight:(BOOL)pinRight rightConstant:(CGFloat)rightConstant {
|
||||
NSMutableDictionary *constraints = [[NSMutableDictionary alloc] init];
|
||||
if (pinTop) {
|
||||
[constraints setObject:[self pinViewTopToSuperview:subview useMargins:useMargins constant:topConstant] forKey:ConstraintTop];
|
||||
}
|
||||
if (pinLeft) {
|
||||
[constraints setObject:[self pinViewLeftToSuperview:subview useMargins:useMargins constant:topConstant] forKey:ConstraintLeading];
|
||||
}
|
||||
if (pinRight) {
|
||||
[constraints setObject:[self pinViewRightToSuperview:subview useMargins:useMargins constant:topConstant] forKey:ConstraintTrailing];
|
||||
}
|
||||
if (pinBottom) {
|
||||
[constraints setObject:[self pinViewBottomToSuperview:subview useMargins:useMargins constant:topConstant] forKey:ConstraintBot];
|
||||
}
|
||||
return constraints;
|
||||
}
|
||||
|
||||
+ (NSLayoutConstraint *)pinViewTopToSuperview:(UIView *)view useMargins:(BOOL)useMargins constant:(CGFloat)constant {
|
||||
|
||||
@ -1,28 +0,0 @@
|
||||
//
|
||||
// MVMCoreUINavigationController.h
|
||||
// MVMCoreUI
|
||||
//
|
||||
// Created by Scott Pfeil on 1/25/19.
|
||||
// Copyright © 2019 Verizon Wireless. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
@class SeparatorView;
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface MVMCoreUINavigationController : UINavigationController
|
||||
|
||||
// Convenience getter
|
||||
+ (nullable instancetype)navigationController;
|
||||
|
||||
// Returns a navigation controller with the mvm styling. Also sets the navigation controller in the appropriate handlers.
|
||||
+ (nullable instancetype)setupNavigationController;
|
||||
|
||||
// Returns a navigation controller with the mvm styling. Also sets the navigation controller in the appropriate handlers. Adds the default loading overlay screen as well.
|
||||
+ (nullable instancetype)setupWithNavigationControllerAsMainController;
|
||||
|
||||
// Separator at the bottom of the navigation bar used for styling.
|
||||
@property (nullable, weak, nonatomic) SeparatorView *separatorView;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@ -1,52 +0,0 @@
|
||||
//
|
||||
// MVMCoreUINavigationController.m
|
||||
// MVMCoreUI
|
||||
//
|
||||
// Created by Scott Pfeil on 1/25/19.
|
||||
// Copyright © 2019 Verizon Wireless. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MVMCoreUINavigationController.h"
|
||||
#import "UIColor+MFConvenience.h"
|
||||
#import "SeparatorView.h"
|
||||
#import "MFFonts.h"
|
||||
#import "MFSizeObject.h"
|
||||
#import "MVMCoreUISession.h"
|
||||
@import MVMCore.MVMCoreActionUtility;
|
||||
@import MVMCore.MVMCoreNavigationHandler;
|
||||
@interface MVMCoreUINavigationController ()
|
||||
|
||||
@end
|
||||
|
||||
@implementation MVMCoreUINavigationController
|
||||
|
||||
+ (nullable instancetype)navigationController {
|
||||
return [MVMCoreActionUtility initializerClassCheck:[MVMCoreUISession sharedGlobal].navigationController classToVerify:self];
|
||||
}
|
||||
|
||||
+ (nullable instancetype)setupNavigationController {
|
||||
MVMCoreUINavigationController *navigationController = [[MVMCoreUINavigationController alloc] init];
|
||||
[UIColor mfSetBackgroundColorForNavigationBar:[UIColor whiteColor] navigationBar:navigationController.navigationBar transparent:NO];
|
||||
[navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
|
||||
navigationController.navigationBar.translucent = NO;
|
||||
navigationController.navigationBar.opaque = YES;
|
||||
navigationController.navigationBar.tintColor = [UIColor blackColor];
|
||||
navigationController.separatorView = [SeparatorView separatorAddToView:navigationController.navigationBar position:SeparatorPositionBot withHorizontalPadding:0];
|
||||
[navigationController.separatorView setAsLight];
|
||||
[navigationController.navigationBar setTitleTextAttributes:@{NSFontAttributeName:[MFFonts mfFont75Bd:[[MFSizeObject sizeObjectWithStandardSize:14 standardiPadPortraitSize:16 iPadProLandscapeSize:18] getValueBasedOnScreenSize]]}];
|
||||
|
||||
// Set standard
|
||||
[MVMCoreUISession sharedGlobal].navigationController = navigationController;
|
||||
[MVMCoreNavigationHandler sharedNavigationHandler].navigationController = navigationController;
|
||||
[MVMCoreNavigationHandler sharedNavigationHandler].viewControllerToPresentOn = navigationController;
|
||||
|
||||
return navigationController;
|
||||
}
|
||||
|
||||
+ (nullable instancetype)setupWithNavigationControllerAsMainController {
|
||||
MVMCoreUINavigationController *navigationController = [self setupNavigationController];
|
||||
[[MVMCoreUISession sharedGlobal] setupAsStandardLoadViewDelegate:navigationController];
|
||||
return navigationController;
|
||||
}
|
||||
|
||||
@end
|
||||
44
MVMCoreUI/Containers/NavigationController.swift
Normal file
44
MVMCoreUI/Containers/NavigationController.swift
Normal file
@ -0,0 +1,44 @@
|
||||
//
|
||||
// NavigationController.swift
|
||||
// MVMCoreUI
|
||||
//
|
||||
// Created by Scott Pfeil on 10/24/19.
|
||||
// Copyright © 2019 Verizon Wireless. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
@objcMembers open class NavigationController: UINavigationController {
|
||||
public var separatorView: Line?
|
||||
|
||||
public static func navigationController() -> Self? {
|
||||
return MVMCoreActionUtility.initializerClassCheck(MVMCoreUISession.sharedGlobal()?.navigationController, classToVerify: self) as? Self
|
||||
}
|
||||
|
||||
public static func style(_ navigationBar: UINavigationBar) {
|
||||
UIColor.mfSetBackgroundColor(forNavigationBar: .white, navigationBar: navigationBar, transparent: false)
|
||||
navigationBar.shadowImage = UIImage()
|
||||
navigationBar.isOpaque = true
|
||||
navigationBar.tintColor = .black
|
||||
if let font = MFFonts.mfFont75Bd(MFSizeObject(standardSize: 14, standardiPadPortraitSize: 16, iPadProLandscapeSize: 18)?.getValueBasedOnScreenSize() ?? 14) {
|
||||
navigationBar.titleTextAttributes = [NSAttributedString.Key.font: font];
|
||||
}
|
||||
}
|
||||
|
||||
public static func setupNavigationController() -> Self? {
|
||||
let navigationController = self.init()
|
||||
style(navigationController.navigationBar)
|
||||
navigationController.separatorView = Line(pinTo: navigationController.navigationBar, edge: .bottom, useMargin: false)
|
||||
navigationController.separatorView?.style = .standard
|
||||
MVMCoreUISession.sharedGlobal()?.navigationController = navigationController
|
||||
MVMCoreNavigationHandler.shared()?.viewControllerToPresentOn = navigationController
|
||||
MVMCoreNavigationHandler.shared()?.navigationController = navigationController
|
||||
return navigationController
|
||||
}
|
||||
|
||||
public static func setupNavigationControllerAsMainController() -> Self? {
|
||||
guard let navigationController = setupNavigationController() else { return nil }
|
||||
MVMCoreUISession.sharedGlobal()?.setup(asStandardLoadViewDelegate: navigationController)
|
||||
return navigationController
|
||||
}
|
||||
}
|
||||
@ -11,10 +11,9 @@
|
||||
@import MVMCore.MVMCoreActionDelegateProtocol;
|
||||
#import <MVMCoreUI/MVMCoreUIPanelProtocol.h>
|
||||
#import <MVMCoreUI/MVMCoreUIPanelButtonProtocol.h>
|
||||
|
||||
@class MVMCoreUINavigationController;
|
||||
@class MVMCoreUITopAlertView;
|
||||
@class MFViewController;
|
||||
@class NavigationController;
|
||||
|
||||
typedef NS_ENUM(NSInteger, MFNumberOfDrawers) {
|
||||
MFNoDrawer = 0,
|
||||
@ -34,7 +33,7 @@ typedef NS_ENUM(NSInteger, MFNumberOfDrawers) {
|
||||
|
||||
@property (nullable, strong, nonatomic) UIBarButtonItem *backButton;
|
||||
|
||||
@property (nullable, weak, nonatomic, readonly) MVMCoreUINavigationController *navigationController;
|
||||
@property (nullable, weak, nonatomic, readonly) NavigationController *navigationController;
|
||||
|
||||
// Reference to the top alert view
|
||||
@property (nullable, weak, nonatomic) MVMCoreUITopAlertView *topAlertView;
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
#import "MVMCoreUIConstants.h"
|
||||
#import "MVMCoreUICommonViewsUtility.h"
|
||||
#import "MVMCoreUITopAlertView.h"
|
||||
#import "MVMCoreUINavigationController.h"
|
||||
#import <MVMCoreUI/MVMCoreUI-Swift.h>
|
||||
|
||||
@interface MVMCoreUISplitViewController ()
|
||||
|
||||
@ -50,7 +50,7 @@ typedef NS_OPTIONS(NSInteger, MFExtendedDrawer) {
|
||||
|
||||
@property (weak, nonatomic, readwrite) UIViewController <MVMCoreUIPanelProtocol> *leftPanel;
|
||||
@property (weak, nonatomic, readwrite) UIViewController <MVMCoreUIPanelProtocol> *rightPanel;
|
||||
@property (weak, nonatomic, readwrite) MVMCoreUINavigationController *navigationController;
|
||||
@property (weak, nonatomic, readwrite) NavigationController *navigationController;
|
||||
|
||||
// A view that covers the detail view when the master is out.
|
||||
@property (weak, nonatomic) IBOutlet UIView *mainViewCoverView;
|
||||
@ -802,7 +802,7 @@ CGFloat const PanelAnimationDuration = 0.2;
|
||||
}
|
||||
|
||||
// The main view.
|
||||
MVMCoreUINavigationController *navigationController = [MVMCoreUINavigationController setupNavigationController];
|
||||
NavigationController *navigationController = [NavigationController setupNavigationController];
|
||||
self.navigationController = navigationController;
|
||||
self.automaticallyAdjustsScrollViewInsets = NO;
|
||||
|
||||
|
||||
@ -71,4 +71,6 @@
|
||||
- (BOOL)bottomViewOutsideOfScroll;
|
||||
//override for setting attributed headline and message
|
||||
-(void)setHeadlineAndMessage;
|
||||
- (nullable UIView *)topAccessoryView;
|
||||
|
||||
@end
|
||||
@ -31,6 +31,7 @@
|
||||
@property (strong, nonatomic) UIView *footerViewOutsideOfScroll;
|
||||
@property (strong, nonatomic) NSLayoutConstraint *bottomViewTopConstraint;
|
||||
@property (strong, nonatomic) UIView *headerAccessoryView;
|
||||
@property (strong, nonatomic) UIView *topAccessoryView;
|
||||
|
||||
|
||||
@end
|
||||
@ -70,6 +71,9 @@
|
||||
}
|
||||
}
|
||||
|
||||
- (nullable UIView *)topAccessoryView {
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (void)newDataBuildScreen {
|
||||
[super newDataBuildScreen];
|
||||
@ -92,10 +96,10 @@
|
||||
[self setHeadlineAndMessage];
|
||||
self.topView = topLabelsView;
|
||||
}
|
||||
|
||||
|
||||
// Setup accessory view.
|
||||
[self setUpHeaderAccessoryView];
|
||||
|
||||
|
||||
// add top view to table header
|
||||
if (self.topView) {
|
||||
self.topView.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
@ -253,16 +257,26 @@
|
||||
UIView *headerAccessoryView = self.headerAccessoryView;
|
||||
[header addSubview:topView];
|
||||
[header addSubview:headerAccessoryView];
|
||||
|
||||
// Sets up the constraints
|
||||
if (headerAccessoryView) {
|
||||
[NSLayoutConstraint activateConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[topView]-0-[headerAccessoryView]" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(topView,headerAccessoryView)]];
|
||||
[NSLayoutConstraint constraintPinSubview:topView pinTop:YES topConstant:0 pinBottom:NO bottomConstant:0 pinLeft:YES leftConstant:0 pinRight:YES rightConstant:0];
|
||||
self.topViewBottomConstraint = [[NSLayoutConstraint constraintPinSubview:headerAccessoryView pinTop:NO topConstant:0 pinBottom:YES bottomConstant:[[self spaceAboveBetweenView] floatValue] pinLeft:YES leftConstant:0 pinRight:YES rightConstant:0] objectForKey:ConstraintBot ofType:[NSLayoutConstraint class]];
|
||||
}
|
||||
else {
|
||||
self.topViewBottomConstraint = [[NSLayoutConstraint constraintPinSubview:topView pinTop:YES topConstant:0 pinBottom:YES bottomConstant:[[self spaceAboveBetweenView] floatValue] pinLeft:YES leftConstant:0 pinRight:YES rightConstant:0] objectForKey:ConstraintBot ofType:[NSLayoutConstraint class]];
|
||||
}
|
||||
|
||||
UIView *topAccessoryView = [self topAccessoryView];
|
||||
self.topAccessoryView = topAccessoryView;
|
||||
if (topAccessoryView) {
|
||||
[header addSubview:topAccessoryView];
|
||||
[NSLayoutConstraint constraintPinSubview:topAccessoryView pinTop:YES pinBottom:NO pinLeft:YES pinRight:YES];
|
||||
[topAccessoryView.bottomAnchor constraintEqualToAnchor:topView.topAnchor constant:0].active = YES;
|
||||
}
|
||||
|
||||
BOOL topPin = topAccessoryView ? NO : YES;
|
||||
// Sets up the constraints
|
||||
if (headerAccessoryView) {
|
||||
[NSLayoutConstraint activateConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[topView]-0-[headerAccessoryView]" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(topView,headerAccessoryView)]];
|
||||
[NSLayoutConstraint constraintPinSubview:topView pinTop:topPin topConstant:0 pinBottom:NO bottomConstant:0 pinLeft:YES leftConstant:0 pinRight:YES rightConstant:0];
|
||||
self.topViewBottomConstraint = [[NSLayoutConstraint constraintPinSubview:headerAccessoryView pinTop:NO topConstant:0 pinBottom:YES bottomConstant:[[self spaceAboveBetweenView] floatValue] pinLeft:YES leftConstant:0 pinRight:YES rightConstant:0] objectForKey:ConstraintBot ofType:[NSLayoutConstraint class]];
|
||||
}
|
||||
else {
|
||||
self.topViewBottomConstraint = [[NSLayoutConstraint constraintPinSubview:topView pinTop:topPin topConstant:0 pinBottom:YES bottomConstant:[[self spaceAboveBetweenView] floatValue] pinLeft:YES leftConstant:0 pinRight:YES rightConstant:0] objectForKey:ConstraintBot ofType:[NSLayoutConstraint class]];
|
||||
}
|
||||
|
||||
self.headerView = header;
|
||||
}
|
||||
|
||||
@ -281,6 +295,7 @@
|
||||
self.footerView = footer;
|
||||
}
|
||||
|
||||
|
||||
- (void)showHeader {
|
||||
|
||||
if (self.headerView) {
|
||||
@ -459,6 +474,10 @@
|
||||
|
||||
#pragma mark - Animation
|
||||
-(void)setupIntroAnimations {
|
||||
|
||||
if (self.topAccessoryView.subviews.count) {
|
||||
[self.introAnimationManager addAnimationWithAnimation:[MVMAnimations fadeUpAnimationWithView:self.topAccessoryView]];
|
||||
}
|
||||
if (self.topView.subviews.count) {
|
||||
[self.introAnimationManager addAnimationWithAnimation:[MVMAnimations fadeUpAnimationWithView:self.topView]];
|
||||
}
|
||||
@ -38,6 +38,8 @@
|
||||
|
||||
#pragma mark - Subclass
|
||||
|
||||
- (nullable UIView *)topAccessoryView;
|
||||
|
||||
// Allow you to add any additional ui before buildViewsBetweenLabelsAndButtons gets called. Can use this to set the topBetweenEdgeView or bottomBetweenEdgeView
|
||||
- (void)buildInAdditionalViewsBeforeCenteredContent;
|
||||
// For subclassing. Should return all the views that will be in between labels and buttons. Override standardSpaceAroundUIObject to handle spacing.
|
||||
@ -31,6 +31,8 @@
|
||||
|
||||
@property (nullable, weak, nonatomic) UIView *betweenView;
|
||||
|
||||
@property (strong, nonatomic) UIView *topAccessoryView;
|
||||
|
||||
// Adds the button view to the screen. Out of the scroll or in.
|
||||
- (void)addViewOutsideOfScrollView:(UIView *)bottomView;
|
||||
- (void)addViewToContentView:(UIView *)bottomView;
|
||||
@ -101,7 +103,7 @@
|
||||
// Removes the bottom view out of scroll if it is there.
|
||||
[self.viewOutOfScroll removeFromSuperview];
|
||||
[StackableViewController removeUIViews:[self.contentView subviews]];
|
||||
|
||||
|
||||
// Checks if we are using a different object than top labels.
|
||||
UIView *topView = [self useCustomViewInsteadOfLabels];
|
||||
self.topView = topView;
|
||||
@ -115,9 +117,19 @@
|
||||
}
|
||||
[self.contentView addSubview:topView];
|
||||
[NSLayoutConstraint activateConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[topView]-0-|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(topView)]];
|
||||
self.topConstraintForTopView = [NSLayoutConstraint constraintWithItem:topView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0];
|
||||
|
||||
UIView *topAccessoryView = [self topAccessoryView];
|
||||
self.topAccessoryView = topAccessoryView;
|
||||
if (topAccessoryView) {
|
||||
[self.contentView addSubview:topAccessoryView];
|
||||
[NSLayoutConstraint activateConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[topAccessoryView]-0-|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(topAccessoryView)]];
|
||||
self.topConstraintForTopView = [NSLayoutConstraint constraintWithItem:topAccessoryView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0];
|
||||
[topAccessoryView.bottomAnchor constraintEqualToAnchor:topView.topAnchor constant:0].active = YES;
|
||||
} else {
|
||||
self.topConstraintForTopView = [NSLayoutConstraint constraintWithItem:topView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0];
|
||||
}
|
||||
|
||||
self.topConstraintForTopView.active = YES;
|
||||
|
||||
// Checks if we are using a different object than the bottom buttons.
|
||||
UIView *bottomView = [self useCustomViewInsteadOfButtons];
|
||||
self.customBottemView = (bottomView != nil);
|
||||
@ -266,7 +278,10 @@
|
||||
if (self.topLabelsView) {
|
||||
[self.topLabelsView setHeadlineString:[[self mapForTopLabels] stringForKey:KeyTitle] messageString:[[self mapForTopLabels] stringForKey:KeyMessage]];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
- (nullable UIView *)topAccessoryView {
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (void)updateViewConstraints {
|
||||
@ -409,6 +424,11 @@
|
||||
|
||||
#pragma mark - Animations
|
||||
-(void)setupIntroAnimations {
|
||||
|
||||
if (self.topAccessoryView.subviews.count) {
|
||||
[self.introAnimationManager addAnimationWithAnimation:[MVMAnimations fadeUpAnimationWithView:self.topAccessoryView]];
|
||||
}
|
||||
|
||||
if (self.topView.subviews) {
|
||||
[self.introAnimationManager addAnimationWithAnimation:[MVMAnimations fadeUpAnimationWithView:self.topView]];
|
||||
}
|
||||
@ -16,7 +16,6 @@ FOUNDATION_EXPORT const unsigned char MVMCoreUIVersionString[];
|
||||
|
||||
// In this header, you should import all the public headers of your framework using statements like #import <MVMCoreUI/PublicHeader.h>
|
||||
#pragma mark - OtherHandlers
|
||||
#import <MVMCoreUI/MVMCoreUIObject.h>
|
||||
#import <MVMCoreUI/MVMCoreUISession.h>
|
||||
#import <MVMCoreUI/MVMCoreUILoggingHandler.h>
|
||||
#import <MVMCoreUI/MVMCoreUIViewControllerMappingObject.h>
|
||||
@ -59,8 +58,6 @@ FOUNDATION_EXPORT const unsigned char MVMCoreUIVersionString[];
|
||||
#import <MVMCoreUI/TopLabelsAndBottomButtonsTableViewController.h>
|
||||
|
||||
#pragma mark - Containers
|
||||
#import <MVMCoreUI/MVMCoreUINavigationController.h>
|
||||
|
||||
#import <MVMCoreUI/MVMCoreUIPanelProtocol.h>
|
||||
#import <MVMCoreUI/MVMCoreUIDetailViewProtocol.h>
|
||||
#import <MVMCoreUI/MVMCoreUIPanelButtonProtocol.h>
|
||||
|
||||
@ -21,9 +21,8 @@ import UIKit
|
||||
private var caretViewHeightSizeObject: MFSizeObject?
|
||||
|
||||
// For separation between cells.
|
||||
public var topSeparatorView: SeparatorView?
|
||||
public var bottomSeparatorView: SeparatorView?
|
||||
|
||||
public var topSeparatorView: Line?
|
||||
public var bottomSeparatorView: Line?
|
||||
public enum SeparatorFrequency: String {
|
||||
case all
|
||||
case allExceptTop
|
||||
@ -41,42 +40,39 @@ import UIKit
|
||||
|
||||
// MARK: - Styling
|
||||
open func style(with styleString: String?) {
|
||||
|
||||
guard let styleString = styleString else { return }
|
||||
|
||||
guard let styleString = styleString else {
|
||||
return
|
||||
}
|
||||
switch styleString {
|
||||
case "standard":
|
||||
styleStandard()
|
||||
|
||||
case "header":
|
||||
styleHeader()
|
||||
|
||||
case "none":
|
||||
styleNone()
|
||||
|
||||
default:
|
||||
break
|
||||
default: break
|
||||
}
|
||||
}
|
||||
|
||||
open func styleStandard() {
|
||||
topMarginPadding = 24
|
||||
bottomMarginPadding = 24
|
||||
bottomSeparatorView?.show()
|
||||
bottomSeparatorView?.setAsLight()
|
||||
topSeparatorView?.style = .none
|
||||
bottomSeparatorView?.style = .standard
|
||||
}
|
||||
|
||||
open func styleHeader() {
|
||||
topMarginPadding = 48
|
||||
bottomMarginPadding = 16
|
||||
bottomSeparatorView?.show()
|
||||
bottomSeparatorView?.setAsRegular()
|
||||
topSeparatorView?.style = .none
|
||||
bottomSeparatorView?.style = .thin
|
||||
}
|
||||
|
||||
open func styleNone() {
|
||||
topMarginPadding = 0
|
||||
bottomMarginPadding = 0
|
||||
bottomSeparatorView?.hide()
|
||||
topSeparatorView?.style = .none
|
||||
bottomSeparatorView?.style = .none
|
||||
}
|
||||
|
||||
/// Adds the molecule to the view.
|
||||
@ -116,23 +112,25 @@ import UIKit
|
||||
// MARK: - MFViewProtocol
|
||||
public func updateView(_ size: CGFloat) {
|
||||
MFStyler.setMarginsFor(self, size: size, defaultHorizontal: updateViewHorizontalDefaults, top: topMarginPadding, bottom: bottomMarginPadding)
|
||||
|
||||
if accessoryView != nil {
|
||||
// Smaller left margin if accessory view.
|
||||
var margin = directionalLayoutMargins
|
||||
margin.trailing = 16
|
||||
contentView.directionalLayoutMargins = margin
|
||||
|
||||
// Update caret automatically.
|
||||
if let caretView = caretView, let widthObject = caretViewWidthSizeObject, let heightObject = caretViewHeightSizeObject {
|
||||
caretView.frame = CGRect(x: 0, y: 0, width: widthObject.getValueBased(onSize: size), height: heightObject.getValueBased(onSize: size))
|
||||
}
|
||||
} else {
|
||||
contentView.directionalLayoutMargins = directionalLayoutMargins
|
||||
}
|
||||
topSeparatorView?.setLeftAndRightPinConstant(directionalLayoutMargins.leading)
|
||||
bottomSeparatorView?.setLeftAndRightPinConstant(directionalLayoutMargins.leading)
|
||||
|
||||
molecule?.updateView(size)
|
||||
if let _ = accessoryView, let caretView = caretView, let widthObject = caretViewWidthSizeObject, let heightObject = caretViewHeightSizeObject {
|
||||
caretView.frame = CGRect(x: 0, y: 0, width: widthObject.getValueBased(onSize: size), height: heightObject.getValueBased(onSize: size))
|
||||
}
|
||||
|
||||
topSeparatorView?.updateView(size)
|
||||
bottomSeparatorView?.updateView(size)
|
||||
|
||||
molecule?.updateView(size)
|
||||
}
|
||||
|
||||
public func setupView() {
|
||||
@ -209,18 +207,13 @@ import UIKit
|
||||
// MARK: - Arrow
|
||||
/// Adds the standard mvm style caret to the accessory view
|
||||
@objc public func addCaretViewAccessory() {
|
||||
|
||||
guard accessoryView == nil else { return }
|
||||
|
||||
caretView = CaretView(lineWidth: 1)
|
||||
caretView?.size = .small(.vertical)
|
||||
caretView?.setConstraints()
|
||||
|
||||
if let size = caretView?.size?.dimensions() {
|
||||
caretViewWidthSizeObject = MFSizeObject(standardSize: size.width, standardiPadPortraitSize: 9)
|
||||
caretViewHeightSizeObject = MFSizeObject(standardSize: size.height, standardiPadPortraitSize: 16)
|
||||
}
|
||||
|
||||
let width: CGFloat = 6
|
||||
let height: CGFloat = 10
|
||||
caretView = CaretView(lineThickness: CaretView.thin)
|
||||
caretView?.frame = CGRect(x: 0, y: 0, width: width, height: height)
|
||||
caretViewWidthSizeObject = MFSizeObject(standardSize: width, standardiPadPortraitSize: 9)
|
||||
caretViewHeightSizeObject = MFSizeObject(standardSize: height, standardiPadPortraitSize: 16)
|
||||
accessoryView = caretView
|
||||
}
|
||||
|
||||
@ -266,9 +259,9 @@ import UIKit
|
||||
setSeparatorFrequency(separatorFrequency, indexPath: indexPath)
|
||||
}
|
||||
} else {
|
||||
topSeparatorView?.hide()
|
||||
bottomSeparatorView?.setAsLight()
|
||||
setSeparatorFrequency(.allExceptTop, indexPath: indexPath)
|
||||
topSeparatorView?.style = .standard
|
||||
bottomSeparatorView?.style = .standard
|
||||
setSeparatorFrequency(TableViewCell.SeparatorFrequency.allExceptTop, indexPath: indexPath)
|
||||
}
|
||||
}
|
||||
|
||||
@ -285,12 +278,22 @@ import UIKit
|
||||
// MARK: - Separator
|
||||
open func addSeparatorsIfNeeded() {
|
||||
if topSeparatorView == nil {
|
||||
topSeparatorView = SeparatorView.separatorAdd(to: self, position: SeparatorPositionTop)
|
||||
topSeparatorView?.hide()
|
||||
let line = Line()
|
||||
line.style = .none
|
||||
addSubview(line)
|
||||
NSLayoutConstraint.pinViewTop(toSuperview: line, useMargins: false, constant: 0).isActive = true
|
||||
NSLayoutConstraint.pinViewLeft(toSuperview: line, useMargins: true, constant: 0).isActive = true
|
||||
NSLayoutConstraint.pinViewRight(toSuperview: line, useMargins: true, constant: 0).isActive = true
|
||||
topSeparatorView = line
|
||||
}
|
||||
if bottomSeparatorView == nil {
|
||||
bottomSeparatorView = SeparatorView.separatorAdd(to: self, position: SeparatorPositionBot)
|
||||
bottomSeparatorView?.hide()
|
||||
let line = Line()
|
||||
line.style = .none
|
||||
addSubview(line)
|
||||
NSLayoutConstraint.pinViewBottom(toSuperview: line, useMargins: false, constant: 0).isActive = true
|
||||
NSLayoutConstraint.pinViewLeft(toSuperview: line, useMargins: true, constant: 0).isActive = true
|
||||
NSLayoutConstraint.pinViewRight(toSuperview: line, useMargins: true, constant: 0).isActive = true
|
||||
bottomSeparatorView = line
|
||||
}
|
||||
}
|
||||
|
||||
@ -299,26 +302,26 @@ import UIKit
|
||||
switch separatorFrequency {
|
||||
case .all:
|
||||
if indexPath.row == 0 {
|
||||
topSeparatorView?.show()
|
||||
topSeparatorView?.isHidden = false
|
||||
} else {
|
||||
topSeparatorView?.hide()
|
||||
topSeparatorView?.isHidden = true
|
||||
}
|
||||
bottomSeparatorView?.show()
|
||||
bottomSeparatorView?.isHidden = false
|
||||
case .allExceptBottom:
|
||||
topSeparatorView?.show()
|
||||
bottomSeparatorView?.hide()
|
||||
topSeparatorView?.isHidden = false
|
||||
bottomSeparatorView?.isHidden = true
|
||||
case .between:
|
||||
if indexPath.row == 0 {
|
||||
topSeparatorView?.hide()
|
||||
topSeparatorView?.isHidden = true
|
||||
} else {
|
||||
topSeparatorView?.show()
|
||||
topSeparatorView?.isHidden = false
|
||||
}
|
||||
bottomSeparatorView?.hide()
|
||||
bottomSeparatorView?.isHidden = true
|
||||
case .allExceptTop:
|
||||
fallthrough
|
||||
default:
|
||||
topSeparatorView?.hide()
|
||||
bottomSeparatorView?.show()
|
||||
topSeparatorView?.isHidden = true
|
||||
bottomSeparatorView?.isHidden = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,12 +9,12 @@
|
||||
import UIKit
|
||||
|
||||
public class StandardHeaderView: ViewConstrainingView {
|
||||
var separatorView: SeparatorView?
|
||||
var line: Line?
|
||||
|
||||
// MARK: - MVMCoreViewProtocol
|
||||
open override func updateView(_ size: CGFloat) {
|
||||
super.updateView(size)
|
||||
separatorView?.updateView(size)
|
||||
line?.updateView(size)
|
||||
}
|
||||
|
||||
public override func setupView() {
|
||||
@ -24,21 +24,12 @@ public class StandardHeaderView: ViewConstrainingView {
|
||||
updateViewHorizontalDefaults = true
|
||||
topMarginPadding = PaddingDefaultVerticalSpacing
|
||||
bottomMarginPadding = PaddingDefaultVerticalSpacing
|
||||
if separatorView == nil, let separatorView = SeparatorView.separatorAdd(to: self, position: SeparatorPositionBot, withHorizontalPadding: 0) {
|
||||
separatorView.setAsHeavy()
|
||||
addSubview(separatorView)
|
||||
self.separatorView = separatorView
|
||||
}
|
||||
}
|
||||
|
||||
public override func setLeftPinConstant(_ constant: CGFloat) {
|
||||
super.setLeftPinConstant(constant)
|
||||
separatorView?.leftPin?.constant = constant
|
||||
}
|
||||
|
||||
public override func setRightPinConstant(_ constant: CGFloat) {
|
||||
super.setRightPinConstant(constant)
|
||||
separatorView?.rightPin?.constant = constant
|
||||
|
||||
guard line == nil else { return }
|
||||
let line = Line(pinTo: self, edge: .bottom, useMargin: true)
|
||||
line.style = .heavy
|
||||
addSubview(line)
|
||||
self.line = line
|
||||
}
|
||||
|
||||
// MARK: - MVMCoreUIMoleculeViewProtocol
|
||||
@ -50,7 +41,7 @@ public class StandardHeaderView: ViewConstrainingView {
|
||||
(molecule as? MVMCoreUIViewConstrainingProtocol)?.shouldSetVerticalMargins?(false)
|
||||
|
||||
if let separatorJSON = json?.optionalDictionaryForKey("separator") {
|
||||
separatorView?.setWithJSON(separatorJSON, delegateObject: delegateObject, additionalData: additionalData)
|
||||
line?.setWithJSON(separatorJSON, delegateObject: delegateObject, additionalData: additionalData)
|
||||
}
|
||||
}
|
||||
|
||||
@ -58,8 +49,7 @@ public class StandardHeaderView: ViewConstrainingView {
|
||||
super.reset()
|
||||
topMarginPadding = PaddingDefaultVerticalSpacing
|
||||
bottomMarginPadding = PaddingDefaultVerticalSpacing
|
||||
separatorView?.setAsHeavy()
|
||||
separatorView?.show()
|
||||
line?.style = .heavy
|
||||
}
|
||||
|
||||
public override class func estimatedHeight(forRow json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat {
|
||||
|
||||
23
MVMCoreUI/OtherHandlers/CoreUIObject.swift
Normal file
23
MVMCoreUI/OtherHandlers/CoreUIObject.swift
Normal file
@ -0,0 +1,23 @@
|
||||
//
|
||||
// CoreUIObject.swift
|
||||
// MVMCoreUI
|
||||
//
|
||||
// Created by Scott Pfeil on 10/24/19.
|
||||
// Copyright © 2019 Verizon Wireless. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
@objcMembers open class CoreUIObject: MVMCoreObject {
|
||||
public var moleculeMap: MVMCoreUIMoleculeMappingObject?
|
||||
|
||||
open override func defaultInitialSetup() {
|
||||
cache = MVMCoreCache()
|
||||
sessionHandler = MVMCoreSessionTimeHandler()
|
||||
actionHandler = MVMCoreActionHandler()
|
||||
session = MVMCoreUISession()
|
||||
viewControllerMapping = MVMCoreUIViewControllerMappingObject()
|
||||
loggingDelegate = MVMCoreUILoggingHandler()
|
||||
moleculeMap = MVMCoreUIMoleculeMappingObject()
|
||||
}
|
||||
}
|
||||
@ -11,7 +11,6 @@
|
||||
@import MVMCore.NSDictionary_MFConvenience;
|
||||
@import MVMCore.MVMCoreLoadObject;
|
||||
@import MVMCore.MVMCoreErrorObject;
|
||||
#import "MVMCoreUIObject.h"
|
||||
#import <MVMCoreUI/MVMCoreUI-Swift.h>
|
||||
#import "MFTextField.h"
|
||||
#import "MVMCoreUIPageControl.h"
|
||||
@ -27,7 +26,7 @@
|
||||
dispatch_once(&onceToken, ^{
|
||||
mapping = [@{
|
||||
@"label": Label.class,
|
||||
@"line": SeparatorView.class,
|
||||
@"line": Line.class,
|
||||
@"button": ButtonView.class,
|
||||
@"textButton": MFTextButton.class,
|
||||
@"header": StandardHeaderView.class,
|
||||
@ -47,7 +46,6 @@
|
||||
@"progressbar": ProgressBar.class,
|
||||
@"circleProgress": GraphView.class,
|
||||
@"multiProgressBar": MultiProgress.class,
|
||||
@"checkbox": MVMCoreUICheckBox.class,
|
||||
@"radioButton": RadioButton.class,
|
||||
@"radioButtonLabel": RadioButtonLabel.class,
|
||||
@"listItem": MoleculeTableViewCell.class,
|
||||
@ -77,7 +75,7 @@
|
||||
|
||||
|
||||
+ (nullable instancetype)sharedMappingObject {
|
||||
return [MVMCoreActionUtility initializerClassCheck:[MVMCoreUIObject sharedInstance].moleculeMap classToVerify:self];
|
||||
return [MVMCoreActionUtility initializerClassCheck:[CoreUIObject sharedInstance].moleculeMap classToVerify:self];
|
||||
}
|
||||
|
||||
- (nullable Class)getMoleculeClassWithJSON:(nonnull NSDictionary *)json {
|
||||
|
||||
@ -1,20 +0,0 @@
|
||||
//
|
||||
// MVMCoreUIObject.h
|
||||
// MVMCoreUI
|
||||
//
|
||||
// Created by Scott Pfeil on 1/28/19.
|
||||
// Copyright © 2019 Verizon Wireless. All rights reserved.
|
||||
//
|
||||
|
||||
#import <MVMCore/MVMCore.h>
|
||||
#import <MVMCoreUI/MVMCoreUIMoleculeMappingObject.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface MVMCoreUIObject : MVMCoreObject
|
||||
|
||||
@property (nullable, nonatomic, strong) MVMCoreUIMoleculeMappingObject *moleculeMap;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@ -1,27 +0,0 @@
|
||||
//
|
||||
// MVMCoreUIObject.m
|
||||
// MVMCoreUI
|
||||
//
|
||||
// Created by Scott Pfeil on 1/28/19.
|
||||
// Copyright © 2019 Verizon Wireless. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MVMCoreUIObject.h"
|
||||
#import "MVMCoreUISession.h"
|
||||
#import "MVMCoreUIViewControllerMappingObject.h"
|
||||
#import "MVMCoreUILoggingHandler.h"
|
||||
|
||||
@implementation MVMCoreUIObject
|
||||
|
||||
- (void)defaultInitialSetup {
|
||||
self.cache = [[MVMCoreCache alloc] init];
|
||||
self.sessionHandler = [[MVMCoreSessionTimeHandler alloc] init];
|
||||
self.actionHandler = [[MVMCoreActionHandler alloc] init];
|
||||
|
||||
self.session = [[MVMCoreUISession alloc] init];
|
||||
self.viewControllerMapping = [[MVMCoreUIViewControllerMappingObject alloc] init];
|
||||
self.loggingDelegate = [[MVMCoreUILoggingHandler alloc] init];
|
||||
self.moleculeMap = [[MVMCoreUIMoleculeMappingObject alloc] init];
|
||||
}
|
||||
|
||||
@end
|
||||
@ -11,15 +11,15 @@
|
||||
@class MVMCoreUITopAlertView;
|
||||
@class MVMCoreUISplitViewController;
|
||||
@class MFViewController;
|
||||
@class MVMCoreUINavigationController;
|
||||
@class MFLoadingViewController;
|
||||
@class NavigationController;
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface MVMCoreUISession : MVMCoreSessionObject
|
||||
|
||||
@property (weak, nonatomic, nullable) MVMCoreUITopAlertView *topAlertView;
|
||||
@property (weak, nonatomic, nullable) MVMCoreUISplitViewController *splitViewController;
|
||||
@property (weak, nonatomic, nullable) MVMCoreUINavigationController *navigationController;
|
||||
@property (weak, nonatomic, nullable) NavigationController *navigationController;
|
||||
@property (weak, nonatomic, nullable) MFLoadingViewController *loadingViewController;
|
||||
|
||||
/// Tracks the current page type the user is currently viewing. KVO compliant.
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
// Copyright © 2019 Verizon Wireless. All rights reserved.
|
||||
//
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <MVMCoreUI/MVMCoreUIMoleculeViewProtocol.h>
|
||||
|
||||
@protocol MoleculeDelegateProtocol <NSObject>
|
||||
|
||||
|
||||
@ -76,14 +76,13 @@ open class MoleculeListTemplate: ThreeLayerTableViewController {
|
||||
return UITableViewCell()
|
||||
}
|
||||
let delegate = delegateObject() as? MVMCoreUIDelegateObject
|
||||
let moleculeCell = cell as? MVMCoreUIMoleculeViewProtocol
|
||||
moleculeCell?.reset?()
|
||||
if let protocolCell = cell as? MoleculeListCellProtocol {
|
||||
protocolCell.setSeparatorWithJSON?(loadObject?.pageJSON?.optionalDictionaryForKey("separator"), delegateObject: delegate, additionalData: nil, indexPath: indexPath)
|
||||
}
|
||||
if let protocolCell = cell as? MVMCoreUIMoleculeViewProtocol {
|
||||
protocolCell.reset?()
|
||||
protocolCell.setWithJSON(moleculeInfo.molecule, delegateObject: delegate, additionalData: nil)
|
||||
protocolCell.updateView(tableView.bounds.width)
|
||||
}
|
||||
moleculeCell?.setWithJSON(moleculeInfo.molecule, delegateObject: delegate, additionalData: nil)
|
||||
moleculeCell?.updateView(tableView.bounds.width)
|
||||
return cell
|
||||
}
|
||||
|
||||
|
||||
@ -9,7 +9,6 @@
|
||||
#import "MVMCoreUIUtility.h"
|
||||
#import "MVMCoreUIConstants.h"
|
||||
#import "MVMCoreUISession.h"
|
||||
#import "MVMCoreUINavigationController.h"
|
||||
#import "MVMCoreUISplitViewController.h"
|
||||
@import MVMCore.MVMCoreNavigationHandler;
|
||||
@import MVMCore.MVMCoreGetterUtility;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user