merge
This commit is contained in:
commit
90605d03de
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
01DF55E021F8FAA800CC099B /* MFTextFieldListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01DF55DF21F8FAA800CC099B /* MFTextFieldListView.swift */; };
|
01DF55E021F8FAA800CC099B /* MFTextFieldListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01DF55DF21F8FAA800CC099B /* MFTextFieldListView.swift */; };
|
||||||
01DF567021FA5AB300CC099B /* MVMCoreUITextFieldListFormViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01DF566F21FA5AB300CC099B /* MVMCoreUITextFieldListFormViewController.swift */; };
|
01DF567021FA5AB300CC099B /* TextFieldListFormViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01DF566F21FA5AB300CC099B /* TextFieldListFormViewController.swift */; };
|
||||||
D206997721FB8A0B00CAE0DE /* MVMCoreUINavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = D206997521FB8A0B00CAE0DE /* MVMCoreUINavigationController.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
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 */; };
|
D206997821FB8A0B00CAE0DE /* MVMCoreUINavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = D206997621FB8A0B00CAE0DE /* MVMCoreUINavigationController.m */; };
|
||||||
D22D1F1A220341F60077CEC0 /* MVMCoreUICheckBox.h in Headers */ = {isa = PBXBuildFile; fileRef = D22D1F18220341F50077CEC0 /* MVMCoreUICheckBox.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
D22D1F1A220341F60077CEC0 /* MVMCoreUICheckBox.h in Headers */ = {isa = PBXBuildFile; fileRef = D22D1F18220341F50077CEC0 /* MVMCoreUICheckBox.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
@ -19,6 +19,7 @@
|
|||||||
D22D1F47220496A30077CEC0 /* MVMCoreUISwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = D22D1F45220496A30077CEC0 /* MVMCoreUISwitch.m */; };
|
D22D1F47220496A30077CEC0 /* MVMCoreUISwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = D22D1F45220496A30077CEC0 /* MVMCoreUISwitch.m */; };
|
||||||
D22D1F562204CE5D0077CEC0 /* MVMCoreUIStackableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = D22D1F542204CE5D0077CEC0 /* MVMCoreUIStackableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
D22D1F562204CE5D0077CEC0 /* MVMCoreUIStackableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = D22D1F542204CE5D0077CEC0 /* MVMCoreUIStackableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
D22D1F572204CE5D0077CEC0 /* MVMCoreUIStackableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D22D1F552204CE5D0077CEC0 /* MVMCoreUIStackableViewController.m */; };
|
D22D1F572204CE5D0077CEC0 /* MVMCoreUIStackableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D22D1F552204CE5D0077CEC0 /* MVMCoreUIStackableViewController.m */; };
|
||||||
|
D274CA332236A78900B01B62 /* StandardFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D274CA322236A78900B01B62 /* StandardFooterView.swift */; };
|
||||||
D28B4F8A21FF967C00712C7A /* MVMCoreUIObject.h in Headers */ = {isa = PBXBuildFile; fileRef = D28B4F8821FF967C00712C7A /* MVMCoreUIObject.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
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 */; };
|
D28B4F8B21FF967C00712C7A /* MVMCoreUIObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D28B4F8921FF967C00712C7A /* MVMCoreUIObject.m */; };
|
||||||
D29770C821F7C4AE00B2F0D0 /* TopLabelsView.m in Sources */ = {isa = PBXBuildFile; fileRef = D29770C621F7C4AE00B2F0D0 /* TopLabelsView.m */; };
|
D29770C821F7C4AE00B2F0D0 /* TopLabelsView.m in Sources */ = {isa = PBXBuildFile; fileRef = D29770C621F7C4AE00B2F0D0 /* TopLabelsView.m */; };
|
||||||
@ -163,7 +164,7 @@
|
|||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
01DF55DF21F8FAA800CC099B /* MFTextFieldListView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MFTextFieldListView.swift; sourceTree = "<group>"; };
|
01DF55DF21F8FAA800CC099B /* MFTextFieldListView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MFTextFieldListView.swift; sourceTree = "<group>"; };
|
||||||
01DF566F21FA5AB300CC099B /* MVMCoreUITextFieldListFormViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MVMCoreUITextFieldListFormViewController.swift; sourceTree = "<group>"; };
|
01DF566F21FA5AB300CC099B /* TextFieldListFormViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextFieldListFormViewController.swift; sourceTree = "<group>"; };
|
||||||
D206997521FB8A0B00CAE0DE /* MVMCoreUINavigationController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MVMCoreUINavigationController.h; 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>"; };
|
D206997621FB8A0B00CAE0DE /* MVMCoreUINavigationController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MVMCoreUINavigationController.m; sourceTree = "<group>"; };
|
||||||
D22D1F18220341F50077CEC0 /* MVMCoreUICheckBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVMCoreUICheckBox.h; sourceTree = "<group>"; };
|
D22D1F18220341F50077CEC0 /* MVMCoreUICheckBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVMCoreUICheckBox.h; sourceTree = "<group>"; };
|
||||||
@ -174,6 +175,7 @@
|
|||||||
D22D1F45220496A30077CEC0 /* MVMCoreUISwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MVMCoreUISwitch.m; sourceTree = "<group>"; };
|
D22D1F45220496A30077CEC0 /* MVMCoreUISwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MVMCoreUISwitch.m; sourceTree = "<group>"; };
|
||||||
D22D1F542204CE5D0077CEC0 /* MVMCoreUIStackableViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MVMCoreUIStackableViewController.h; sourceTree = "<group>"; };
|
D22D1F542204CE5D0077CEC0 /* MVMCoreUIStackableViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MVMCoreUIStackableViewController.h; sourceTree = "<group>"; };
|
||||||
D22D1F552204CE5D0077CEC0 /* MVMCoreUIStackableViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MVMCoreUIStackableViewController.m; sourceTree = "<group>"; };
|
D22D1F552204CE5D0077CEC0 /* MVMCoreUIStackableViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MVMCoreUIStackableViewController.m; sourceTree = "<group>"; };
|
||||||
|
D274CA322236A78900B01B62 /* StandardFooterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StandardFooterView.swift; sourceTree = "<group>"; };
|
||||||
D28B4F8821FF967C00712C7A /* MVMCoreUIObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MVMCoreUIObject.h; 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>"; };
|
D28B4F8921FF967C00712C7A /* MVMCoreUIObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MVMCoreUIObject.m; sourceTree = "<group>"; };
|
||||||
D29770C621F7C4AE00B2F0D0 /* TopLabelsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TopLabelsView.m; sourceTree = "<group>"; };
|
D29770C621F7C4AE00B2F0D0 /* TopLabelsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TopLabelsView.m; sourceTree = "<group>"; };
|
||||||
@ -387,7 +389,7 @@
|
|||||||
D29DF0DF21E418B2003B2FB9 /* Templates */ = {
|
D29DF0DF21E418B2003B2FB9 /* Templates */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
01DF566F21FA5AB300CC099B /* MVMCoreUITextFieldListFormViewController.swift */,
|
01DF566F21FA5AB300CC099B /* TextFieldListFormViewController.swift */,
|
||||||
D2A5146022121FBF00345BFB /* MoleculeStackTemplate.swift */,
|
D2A5146022121FBF00345BFB /* MoleculeStackTemplate.swift */,
|
||||||
D2A514622213643100345BFB /* MoleculeStackCenteredTemplate.swift */,
|
D2A514622213643100345BFB /* MoleculeStackCenteredTemplate.swift */,
|
||||||
);
|
);
|
||||||
@ -424,6 +426,7 @@
|
|||||||
D2A514662213885800345BFB /* StandardHeaderView.swift */,
|
D2A514662213885800345BFB /* StandardHeaderView.swift */,
|
||||||
D2A5145C2211D22A00345BFB /* MVMCoreUIMoleculeViewProtocol.h */,
|
D2A5145C2211D22A00345BFB /* MVMCoreUIMoleculeViewProtocol.h */,
|
||||||
D2A5145E2211DDC100345BFB /* MoleculeStackView.swift */,
|
D2A5145E2211DDC100345BFB /* MoleculeStackView.swift */,
|
||||||
|
D274CA322236A78900B01B62 /* StandardFooterView.swift */,
|
||||||
);
|
);
|
||||||
path = Molecules;
|
path = Molecules;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -868,7 +871,7 @@
|
|||||||
D29DF12E21E6851E003B2FB9 /* MVMCoreUITopAlertView.m in Sources */,
|
D29DF12E21E6851E003B2FB9 /* MVMCoreUITopAlertView.m in Sources */,
|
||||||
D29DF2CF21E7C104003B2FB9 /* MFLoadingViewController.m in Sources */,
|
D29DF2CF21E7C104003B2FB9 /* MFLoadingViewController.m in Sources */,
|
||||||
D22D1F572204CE5D0077CEC0 /* MVMCoreUIStackableViewController.m in Sources */,
|
D22D1F572204CE5D0077CEC0 /* MVMCoreUIStackableViewController.m in Sources */,
|
||||||
01DF567021FA5AB300CC099B /* MVMCoreUITextFieldListFormViewController.swift in Sources */,
|
01DF567021FA5AB300CC099B /* TextFieldListFormViewController.swift in Sources */,
|
||||||
D2A5145F2211DDC100345BFB /* MoleculeStackView.swift in Sources */,
|
D2A5145F2211DDC100345BFB /* MoleculeStackView.swift in Sources */,
|
||||||
D29DF27621E79E81003B2FB9 /* MVMCoreUILoggingHandler.m in Sources */,
|
D29DF27621E79E81003B2FB9 /* MVMCoreUILoggingHandler.m in Sources */,
|
||||||
D29DF24D21E6A177003B2FB9 /* MFTextField.m in Sources */,
|
D29DF24D21E6A177003B2FB9 /* MFTextField.m in Sources */,
|
||||||
@ -886,6 +889,7 @@
|
|||||||
D29DF18321E69E54003B2FB9 /* SeparatorView.m in Sources */,
|
D29DF18321E69E54003B2FB9 /* SeparatorView.m in Sources */,
|
||||||
D29DF17A21E69E1F003B2FB9 /* MFCustomButton.m in Sources */,
|
D29DF17A21E69E1F003B2FB9 /* MFCustomButton.m in Sources */,
|
||||||
D29DF26121E6A985003B2FB9 /* MFLoadImageView.m in Sources */,
|
D29DF26121E6A985003B2FB9 /* MFLoadImageView.m in Sources */,
|
||||||
|
D274CA332236A78900B01B62 /* StandardFooterView.swift in Sources */,
|
||||||
D29DF2BF21E7BEA4003B2FB9 /* MVMCoreUITabBarPageControlViewController.m in Sources */,
|
D29DF2BF21E7BEA4003B2FB9 /* MVMCoreUITabBarPageControlViewController.m in Sources */,
|
||||||
D29DF28321E7AB24003B2FB9 /* MVMCoreUICommonViewsUtility.m in Sources */,
|
D29DF28321E7AB24003B2FB9 /* MVMCoreUICommonViewsUtility.m in Sources */,
|
||||||
D29DF28A21E7AC2B003B2FB9 /* MFLabel.m in Sources */,
|
D29DF28A21E7AC2B003B2FB9 /* MFLabel.m in Sources */,
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
#import <MVMCoreUI/MFView.h>
|
#import <MVMCoreUI/MFView.h>
|
||||||
@class MFSizeObject;
|
@class MFSizeObject;
|
||||||
|
|
||||||
@interface MFTextButton : MFCustomButton <MVMCoreViewProtocol>
|
@interface MFTextButton : MFCustomButton <MVMCoreViewProtocol, MVMCoreUIMoleculeViewProtocol>
|
||||||
|
|
||||||
@property (nonnull, strong, nonatomic) MFSizeObject *sizeObject;
|
@property (nonnull, strong, nonatomic) MFSizeObject *sizeObject;
|
||||||
|
|
||||||
|
|||||||
@ -11,8 +11,10 @@
|
|||||||
#import <MVMCoreUI/MFSizeObject.h>
|
#import <MVMCoreUI/MFSizeObject.h>
|
||||||
#import "UIColor+MFConvenience.h"
|
#import "UIColor+MFConvenience.h"
|
||||||
#import "MVMCoreUISplitViewController.h"
|
#import "MVMCoreUISplitViewController.h"
|
||||||
|
#import "MVMCoreUIConstants.h"
|
||||||
@import MVMCore.MVMCoreDispatchUtility;
|
@import MVMCore.MVMCoreDispatchUtility;
|
||||||
@import MVMCore.MVMCoreGetterUtility;
|
@import MVMCore.MVMCoreGetterUtility;
|
||||||
|
@import MVMCore.NSDictionary_MFConvenience;
|
||||||
|
|
||||||
@interface MFTextButton ()
|
@interface MFTextButton ()
|
||||||
|
|
||||||
@ -124,4 +126,19 @@
|
|||||||
return theButton;
|
return theButton;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - MVMCoreUIMoleculeViewProtocol
|
||||||
|
|
||||||
|
- (void)setWithJSON:(NSDictionary *)json delegate:(NSObject *)delegate additionalData:(NSDictionary *)additionalData {
|
||||||
|
NSString *color = [json string:KeyTextColor];
|
||||||
|
if (color) {
|
||||||
|
[self setTitleColor:[UIColor mfGetColorForHex:color] forState:UIControlStateNormal];
|
||||||
|
}
|
||||||
|
[self setWithActionMap:json actionDelegate:([delegate conformsToProtocol:@protocol(MVMCoreActionDelegateProtocol)] ? (NSObject <MVMCoreActionDelegateProtocol>*)delegate : nil) additionalData:additionalData buttonDelegate:([delegate conformsToProtocol:@protocol(ButtonDelegateProtocol)] ? (id <ButtonDelegateProtocol>)delegate : nil)];
|
||||||
|
if ([self titleForState:UIControlStateNormal].length == 0) {
|
||||||
|
self.heightConstraint.constant = 0;
|
||||||
|
} else {
|
||||||
|
self.heightConstraint.constant = self.sizeObject.standardSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@ -72,6 +72,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)setWithJSON:(NSDictionary *)json delegate:(NSObject *)delegate additionalData:(NSDictionary *)additionalData {
|
||||||
|
[super setWithJSON:json delegate:delegate additionalData:additionalData];
|
||||||
|
[self.label setWithJSON:json delegate:delegate additionalData:additionalData];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)alignLeft {
|
- (void)alignLeft {
|
||||||
self.alignCenterPin.active = NO;
|
self.alignCenterPin.active = NO;
|
||||||
self.alignCenterLeftPin.active = NO;
|
self.alignCenterLeftPin.active = NO;
|
||||||
|
|||||||
@ -40,9 +40,7 @@
|
|||||||
#pragma mark - 1.0
|
#pragma mark - 1.0
|
||||||
|
|
||||||
// Getters
|
// Getters
|
||||||
+ (nonnull MFLabel *)label;
|
+ (nonnull MFLabel *)label NS_SWIFT_NAME(commonLabel());
|
||||||
// This is for swift files. Swift is not able to find MFLabel.label()
|
|
||||||
+ (nonnull MFLabel *)standardLabel;
|
|
||||||
+ (nonnull MFLabel *)commonLabelBodyWithSize:(CGFloat)size scale:(BOOL)scale;
|
+ (nonnull MFLabel *)commonLabelBodyWithSize:(CGFloat)size scale:(BOOL)scale;
|
||||||
+ (nonnull MFLabel *)commonLabelBodyBold:(BOOL)scale;
|
+ (nonnull MFLabel *)commonLabelBodyBold:(BOOL)scale;
|
||||||
+ (nonnull MFLabel *)commonLabelBodyLighter:(BOOL)scale;
|
+ (nonnull MFLabel *)commonLabelBodyLighter:(BOOL)scale;
|
||||||
|
|||||||
@ -33,7 +33,6 @@
|
|||||||
self.numberOfLines = 0;
|
self.numberOfLines = 0;
|
||||||
self.lineBreakMode = NSLineBreakByWordWrapping;
|
self.lineBreakMode = NSLineBreakByWordWrapping;
|
||||||
self.translatesAutoresizingMaskIntoConstraints = NO;
|
self.translatesAutoresizingMaskIntoConstraints = NO;
|
||||||
[self styleB2:YES];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)init {
|
- (instancetype)init {
|
||||||
@ -110,12 +109,6 @@
|
|||||||
return [[MFLabel alloc] initWithFrame:CGRectZero];
|
return [[MFLabel alloc] initWithFrame:CGRectZero];
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is for swift files. Swift is not able to find MFLabel.label()
|
|
||||||
+ (nonnull MFLabel *)standardLabel {
|
|
||||||
MFLabel *label = [MFLabel label];
|
|
||||||
return label;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ (nonnull MFLabel *)commonLabelB2:(BOOL)scale {
|
+ (nonnull MFLabel *)commonLabelB2:(BOOL)scale {
|
||||||
MFLabel *label = [MFLabel label];
|
MFLabel *label = [MFLabel label];
|
||||||
[label styleB2:scale];
|
[label styleB2:scale];
|
||||||
|
|||||||
@ -25,7 +25,7 @@
|
|||||||
@interface MFTextView : UIView <UITextViewDelegate>
|
@interface MFTextView : UIView <UITextViewDelegate>
|
||||||
|
|
||||||
@property (weak, nonatomic, nullable) id delegate;
|
@property (weak, nonatomic, nullable) id delegate;
|
||||||
@property (weak, nonatomic) IBOutlet CustomTextView *textView;
|
@property (nullable, weak, nonatomic) IBOutlet CustomTextView *textView;
|
||||||
@property (assign, nonatomic) BOOL hideBorder;
|
@property (assign, nonatomic) BOOL hideBorder;
|
||||||
@property (strong, nonatomic, nullable) UIBezierPath *borderPath;
|
@property (strong, nonatomic, nullable) UIBezierPath *borderPath;
|
||||||
@property (nonatomic, readwrite) BOOL errorShowing;
|
@property (nonatomic, readwrite) BOOL errorShowing;
|
||||||
|
|||||||
@ -41,6 +41,8 @@
|
|||||||
- (void)updateView:(CGFloat)size {
|
- (void)updateView:(CGFloat)size {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - MVMCoreUIMoleculeViewProtocol
|
||||||
|
|
||||||
- (void)setWithJSON:(NSDictionary *)json delegate:(NSObject *)delegate additionalData:(nullable NSDictionary *)additionalData {
|
- (void)setWithJSON:(NSDictionary *)json delegate:(NSObject *)delegate additionalData:(nullable NSDictionary *)additionalData {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -135,4 +135,10 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - MVMCoreUIMoleculeViewProtocol
|
||||||
|
|
||||||
|
- (void)setAsMolecule {
|
||||||
|
self.updateViewHorizontalDefaults = YES;
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@ -181,7 +181,7 @@ extension ThreeLayerViewController {
|
|||||||
contentView.addSubview(bottomSpacer)
|
contentView.addSubview(bottomSpacer)
|
||||||
bottomSpacer.leftAnchor.constraint(equalTo: contentView.leftAnchor).isActive = true
|
bottomSpacer.leftAnchor.constraint(equalTo: contentView.leftAnchor).isActive = true
|
||||||
contentView.rightAnchor.constraint(equalTo: bottomSpacer.rightAnchor).isActive = true
|
contentView.rightAnchor.constraint(equalTo: bottomSpacer.rightAnchor).isActive = true
|
||||||
bottomSpacer.heightAnchor.constraint(greaterThanOrEqualToConstant: PaddingDefaultVerticalSpacing).isActive = true
|
bottomSpacer.heightAnchor.constraint(greaterThanOrEqualToConstant: 0).isActive = true
|
||||||
middleView.topAnchor.constraint(equalTo: topView.bottomAnchor, constant: spaceAbove).isActive = true
|
middleView.topAnchor.constraint(equalTo: topView.bottomAnchor, constant: spaceAbove).isActive = true
|
||||||
bottomSpacer.topAnchor.constraint(equalTo: middleView.bottomAnchor).isActive = true
|
bottomSpacer.topAnchor.constraint(equalTo: middleView.bottomAnchor).isActive = true
|
||||||
bottomView.topAnchor.constraint(equalTo: bottomSpacer.bottomAnchor).isActive = true
|
bottomView.topAnchor.constraint(equalTo: bottomSpacer.bottomAnchor).isActive = true
|
||||||
@ -191,7 +191,7 @@ extension ThreeLayerViewController {
|
|||||||
contentView.addSubview(topSpacer)
|
contentView.addSubview(topSpacer)
|
||||||
topSpacer.leftAnchor.constraint(equalTo: contentView.leftAnchor).isActive = true
|
topSpacer.leftAnchor.constraint(equalTo: contentView.leftAnchor).isActive = true
|
||||||
contentView.rightAnchor.constraint(equalTo: topSpacer.rightAnchor).isActive = true
|
contentView.rightAnchor.constraint(equalTo: topSpacer.rightAnchor).isActive = true
|
||||||
topSpacer.heightAnchor.constraint(greaterThanOrEqualToConstant: PaddingDefaultVerticalSpacing).isActive = true
|
topSpacer.heightAnchor.constraint(greaterThanOrEqualToConstant: PaddingTwo).isActive = true
|
||||||
topSpacer.topAnchor.constraint(equalTo: topView.bottomAnchor).isActive = true
|
topSpacer.topAnchor.constraint(equalTo: topView.bottomAnchor).isActive = true
|
||||||
middleView.topAnchor.constraint(equalTo: topSpacer.bottomAnchor).isActive = true
|
middleView.topAnchor.constraint(equalTo: topSpacer.bottomAnchor).isActive = true
|
||||||
bottomView.topAnchor.constraint(equalTo: middleView.bottomAnchor, constant: spaceBelow).isActive = true
|
bottomView.topAnchor.constraint(equalTo: middleView.bottomAnchor, constant: spaceBelow).isActive = true
|
||||||
@ -206,7 +206,7 @@ extension ThreeLayerViewController {
|
|||||||
bottomSpacer.leftAnchor.constraint(equalTo: contentView.leftAnchor).isActive = true
|
bottomSpacer.leftAnchor.constraint(equalTo: contentView.leftAnchor).isActive = true
|
||||||
contentView.rightAnchor.constraint(equalTo: bottomSpacer.rightAnchor).isActive = true
|
contentView.rightAnchor.constraint(equalTo: bottomSpacer.rightAnchor).isActive = true
|
||||||
topSpacer.heightAnchor.constraint(equalTo: bottomSpacer.heightAnchor).isActive = true
|
topSpacer.heightAnchor.constraint(equalTo: bottomSpacer.heightAnchor).isActive = true
|
||||||
topSpacer.heightAnchor.constraint(greaterThanOrEqualToConstant: PaddingDefaultVerticalSpacing).isActive = true
|
topSpacer.heightAnchor.constraint(greaterThanOrEqualToConstant: PaddingTwo).isActive = true
|
||||||
topSpacer.topAnchor.constraint(equalTo: topView.bottomAnchor).isActive = true
|
topSpacer.topAnchor.constraint(equalTo: topView.bottomAnchor).isActive = true
|
||||||
middleView.topAnchor.constraint(equalTo: topSpacer.bottomAnchor).isActive = true
|
middleView.topAnchor.constraint(equalTo: topSpacer.bottomAnchor).isActive = true
|
||||||
bottomSpacer.topAnchor.constraint(equalTo: middleView.bottomAnchor).isActive = true
|
bottomSpacer.topAnchor.constraint(equalTo: middleView.bottomAnchor).isActive = true
|
||||||
|
|||||||
@ -108,7 +108,7 @@ typedef NS_ENUM(NSInteger, MFNumberOfDrawers) {
|
|||||||
#pragma mark - Main Subclassables
|
#pragma mark - Main Subclassables
|
||||||
|
|
||||||
// Can subclass to set threshold for when the drawers are permanently extended. Default is 1000 for the left panel and 2000 for both.
|
// Can subclass to set threshold for when the drawers are permanently extended. Default is 1000 for the left panel and 2000 for both.
|
||||||
- (MFNumberOfDrawers)numberOfDrawersShouldShow:(NSNumber *)forWidth;
|
- (MFNumberOfDrawers)numberOfDrawersShouldShow:(nullable NSNumber *)forWidth;
|
||||||
|
|
||||||
// subclass to return panels
|
// subclass to return panels
|
||||||
- (nullable UIViewController <MVMCoreUIPanelProtocol> *)createLeftPanelViewController;
|
- (nullable UIViewController <MVMCoreUIPanelProtocol> *)createLeftPanelViewController;
|
||||||
@ -131,8 +131,8 @@ typedef NS_ENUM(NSInteger, MFNumberOfDrawers) {
|
|||||||
|
|
||||||
#pragma mark - Button Presses
|
#pragma mark - Button Presses
|
||||||
|
|
||||||
- (IBAction)leftPanelButtonPressed:(id)sender;
|
- (IBAction)leftPanelButtonPressed:(nullable id)sender;
|
||||||
- (IBAction)backButtonPressed:(id)sender;
|
- (IBAction)backButtonPressed:(nullable id)sender;
|
||||||
- (IBAction)rightPanelButtonPressed:(id)sender;
|
- (IBAction)rightPanelButtonPressed:(nullable id)sender;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@ -13,6 +13,11 @@
|
|||||||
// Sets up the ui based on the json
|
// Sets up the ui based on the json
|
||||||
- (void)setWithJSON:(nullable NSDictionary *)json delegate:(nullable NSObject *)delegate additionalData:(nullable NSDictionary *)additionalData;
|
- (void)setWithJSON:(nullable NSDictionary *)json delegate:(nullable NSObject *)delegate additionalData:(nullable NSDictionary *)additionalData;
|
||||||
|
|
||||||
|
@optional
|
||||||
|
|
||||||
|
// Called after init to provide an early setter for any molecule specific logic
|
||||||
|
- (void)setAsMolecule;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -42,7 +42,7 @@
|
|||||||
if (backgroundColorString) {
|
if (backgroundColorString) {
|
||||||
self.backgroundColor = [UIColor mfGetColorForHex:backgroundColorString];
|
self.backgroundColor = [UIColor mfGetColorForHex:backgroundColorString];
|
||||||
}
|
}
|
||||||
[self setupWithFirstButtonJSON:[json dict:@"FirstButton"] secondButtonJSON:[json dict:@"SecondButton"] additionalData:nil actionDelegate:([delegate conformsToProtocol:@protocol(MVMCoreActionDelegateProtocol)] ? (NSObject <MVMCoreActionDelegateProtocol>*)delegate : nil) buttonDelegate:([delegate conformsToProtocol:@protocol(ButtonDelegateProtocol)] ? (id <ButtonDelegateProtocol>)delegate : nil)];
|
[self setupWithFirstButtonJSON:[json dict:@"firstButton"] secondButtonJSON:[json dict:@"secondButton"] additionalData:nil actionDelegate:([delegate conformsToProtocol:@protocol(MVMCoreActionDelegateProtocol)] ? (NSObject <MVMCoreActionDelegateProtocol>*)delegate : nil) buttonDelegate:([delegate conformsToProtocol:@protocol(ButtonDelegateProtocol)] ? (id <ButtonDelegateProtocol>)delegate : nil)];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Inits
|
#pragma mark - Inits
|
||||||
@ -115,7 +115,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)setupWithFirstButtonJSON:(nullable NSDictionary *)firstButtonJSON secondButtonJSON:(nullable NSDictionary *)secondButtonJSON additionalData:(nullable NSDictionary *)additionalData actionDelegate:(nullable NSObject <MVMCoreActionDelegateProtocol>*)actionDelegate buttonDelegate:(nullable id <ButtonDelegateProtocol>)buttonDelegate {
|
- (void)setupWithFirstButtonJSON:(nullable NSDictionary *)firstButtonJSON secondButtonJSON:(nullable NSDictionary *)secondButtonJSON additionalData:(nullable NSDictionary *)additionalData actionDelegate:(nullable NSObject <MVMCoreActionDelegateProtocol>*)actionDelegate buttonDelegate:(nullable id <ButtonDelegateProtocol>)buttonDelegate {
|
||||||
[self setupWithPrimaryButtonMap:firstButtonJSON secondaryButtonMap:secondButtonJSON additionalData:additionalData actionDelegate:actionDelegate buttonDelegate:buttonDelegate legacyJSON:NO];
|
[self setupWithPrimaryButtonMap:secondButtonJSON secondaryButtonMap:firstButtonJSON additionalData:additionalData actionDelegate:actionDelegate buttonDelegate:buttonDelegate legacyJSON:NO];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setupWithPrimaryButtonMap:(nullable NSDictionary *)primaryButtonMap secondaryButtonMap:(nullable NSDictionary *)secondaryButtonMap actionDelegate:(nullable NSObject <MVMCoreActionDelegateProtocol>*)actionDelegate additionalData:(nullable NSDictionary *)additionalData buttonDelegate:(nullable id <ButtonDelegateProtocol>)buttonDelegate {
|
- (void)setupWithPrimaryButtonMap:(nullable NSDictionary *)primaryButtonMap secondaryButtonMap:(nullable NSDictionary *)secondaryButtonMap actionDelegate:(nullable NSObject <MVMCoreActionDelegateProtocol>*)actionDelegate additionalData:(nullable NSDictionary *)additionalData buttonDelegate:(nullable id <ButtonDelegateProtocol>)buttonDelegate {
|
||||||
|
|||||||
112
MVMCoreUI/Molecules/StandardFooterView.swift
Normal file
112
MVMCoreUI/Molecules/StandardFooterView.swift
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
//
|
||||||
|
// StandardFooterView.swift
|
||||||
|
// MVMCoreUI
|
||||||
|
//
|
||||||
|
// Created by Scott Pfeil on 3/11/19.
|
||||||
|
// Copyright © 2019 Verizon Wireless. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
public class StandardFooterView: ViewConstrainingView {
|
||||||
|
let twoButtonView = PrimaryButtonView(frame: .zero)
|
||||||
|
var textButton = MFTextButton(nil, constrainHeight: true, forWidth: MVMCoreUIUtility.getWidth())
|
||||||
|
var spaceBetweenButtons: NSLayoutConstraint?
|
||||||
|
var leftConstraintTwoButton: NSLayoutConstraint?
|
||||||
|
var rightConstraintTwoButton: NSLayoutConstraint?
|
||||||
|
var leftConstraintTextButton: NSLayoutConstraint?
|
||||||
|
var rightConstraintTextButton: NSLayoutConstraint?
|
||||||
|
var centerAlignTextButton: NSLayoutConstraint?
|
||||||
|
private var heightConstraint: NSLayoutConstraint?
|
||||||
|
|
||||||
|
public override func updateView(_ size: CGFloat) {
|
||||||
|
super.updateView(size)
|
||||||
|
twoButtonView.updateView(size)
|
||||||
|
textButton.updateView(size)
|
||||||
|
setSpacing()
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func setupView() {
|
||||||
|
super.setupView()
|
||||||
|
guard subviews.count == 0 else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
backgroundColor = .clear
|
||||||
|
clipsToBounds = true
|
||||||
|
|
||||||
|
addSubview(twoButtonView)
|
||||||
|
addSubview(textButton)
|
||||||
|
|
||||||
|
topPin = twoButtonView.topAnchor.constraint(equalTo: topAnchor, constant: PaddingDefaultVerticalSpacing)
|
||||||
|
topPin?.isActive = true
|
||||||
|
|
||||||
|
spaceBetweenButtons = textButton.topAnchor.constraint(equalTo: twoButtonView.bottomAnchor, constant: PaddingTwo)
|
||||||
|
spaceBetweenButtons?.isActive = true
|
||||||
|
|
||||||
|
leftConstraintTwoButton = twoButtonView.leftAnchor.constraint(equalTo: leftAnchor)
|
||||||
|
leftConstraintTwoButton?.isActive = true
|
||||||
|
|
||||||
|
rightConstraintTwoButton = rightAnchor.constraint(equalTo: twoButtonView.rightAnchor)
|
||||||
|
rightConstraintTwoButton?.isActive = true
|
||||||
|
|
||||||
|
leftConstraintTextButton = textButton.leftAnchor.constraint(greaterThanOrEqualTo: leftAnchor)
|
||||||
|
leftConstraintTextButton?.isActive = true
|
||||||
|
|
||||||
|
rightConstraintTextButton = rightAnchor.constraint(greaterThanOrEqualTo: textButton.rightAnchor)
|
||||||
|
rightConstraintTextButton?.isActive = true
|
||||||
|
|
||||||
|
centerAlignTextButton = textButton.centerXAnchor.constraint(equalTo: centerXAnchor)
|
||||||
|
centerAlignTextButton?.isActive = true
|
||||||
|
|
||||||
|
bottomPin = bottomAnchor.constraint(equalTo: textButton.bottomAnchor, constant: PaddingDefaultVerticalSpacing)
|
||||||
|
bottomPin?.isActive = true
|
||||||
|
|
||||||
|
heightConstraint = heightAnchor.constraint(equalToConstant: 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func setSpacing() {
|
||||||
|
if twoButtonView.subviews.count > 0 && textButton.title(for: UIControl.State.normal)?.count ?? 0 > 0 {
|
||||||
|
spaceBetweenButtons?.constant = PaddingTwo
|
||||||
|
show()
|
||||||
|
} else if twoButtonView.subviews.count > 0 || textButton.title(for: UIControl.State.normal)?.count ?? 0 > 0 {
|
||||||
|
spaceBetweenButtons?.constant = 0
|
||||||
|
show()
|
||||||
|
} else {
|
||||||
|
hide()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func show() {
|
||||||
|
super.show()
|
||||||
|
heightConstraint?.isActive = false
|
||||||
|
topPin?.isActive = true
|
||||||
|
layoutIfNeeded()
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func hide() {
|
||||||
|
super.hide()
|
||||||
|
heightConstraint?.isActive = true
|
||||||
|
topPin?.isActive = false
|
||||||
|
layoutIfNeeded()
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func setLeftPinConstant(_ constant: CGFloat) {
|
||||||
|
leftConstraintTwoButton?.constant = constant
|
||||||
|
leftConstraintTextButton?.constant = constant
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func setRightPinConstant(_ constant: CGFloat) {
|
||||||
|
rightConstraintTwoButton?.constant = constant
|
||||||
|
rightConstraintTextButton?.constant = constant
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func setWithJSON(_ json: [AnyHashable : Any]?, delegate: NSObject?, additionalData: [AnyHashable : Any]?) {
|
||||||
|
super.setWithJSON(json, delegate: delegate, additionalData: additionalData)
|
||||||
|
if let colorString = json?.optionalStringForKey(KeyBackgroundColor) {
|
||||||
|
backgroundColor = .mfGet(forHex: colorString)
|
||||||
|
}
|
||||||
|
twoButtonView.setWithJSON(json?.optionalDictionaryForKey("twoButtonView"), delegate: delegate, additionalData: additionalData)
|
||||||
|
textButton.setWithJSON(json?.optionalDictionaryForKey("textButton"), delegate: delegate, additionalData: additionalData)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -33,7 +33,6 @@ public class StandardHeaderView: ViewConstrainingView {
|
|||||||
translatesAutoresizingMaskIntoConstraints = false
|
translatesAutoresizingMaskIntoConstraints = false
|
||||||
backgroundColor = .clear
|
backgroundColor = .clear
|
||||||
clipsToBounds = true
|
clipsToBounds = true
|
||||||
updateViewHorizontalDefaults = true
|
|
||||||
|
|
||||||
addSubview(headlineLabel)
|
addSubview(headlineLabel)
|
||||||
addSubview(messageLabel)
|
addSubview(messageLabel)
|
||||||
|
|||||||
@ -21,9 +21,14 @@
|
|||||||
static NSMutableDictionary <NSString *, Class>*mapping;
|
static NSMutableDictionary <NSString *, Class>*mapping;
|
||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
mapping = [@{
|
mapping = [@{
|
||||||
|
@"label": LabelView.class,
|
||||||
|
@"separator": SeparatorView.class,
|
||||||
|
@"button": MFCustomButton.class,
|
||||||
|
@"textButton": MFTextButton.class,
|
||||||
@"standardHeader": StandardHeaderView.class,
|
@"standardHeader": StandardHeaderView.class,
|
||||||
@"moleculeStack": MoleculeStackView.class,
|
@"moleculeStack": MoleculeStackView.class,
|
||||||
@"twoButtonView": PrimaryButtonView.class
|
@"twoButtonView": PrimaryButtonView.class,
|
||||||
|
@"standardFooter": StandardFooterView.class
|
||||||
} mutableCopy];
|
} mutableCopy];
|
||||||
});
|
});
|
||||||
return mapping;
|
return mapping;
|
||||||
@ -37,7 +42,11 @@
|
|||||||
- (nullable UIView <MVMCoreUIMoleculeViewProtocol>*)getMoleculeForName:(nonnull NSString *)name {
|
- (nullable UIView <MVMCoreUIMoleculeViewProtocol>*)getMoleculeForName:(nonnull NSString *)name {
|
||||||
Class class = [self.moleculeMapping objectForKey:name];
|
Class class = [self.moleculeMapping objectForKey:name];
|
||||||
if (class) {
|
if (class) {
|
||||||
return [[class alloc] init];
|
UIView <MVMCoreUIMoleculeViewProtocol>*view = [[class alloc] init];
|
||||||
|
if ([view respondsToSelector:@selector(setAsMolecule)]) {
|
||||||
|
[view setAsMolecule];
|
||||||
|
}
|
||||||
|
return view;
|
||||||
}
|
}
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,7 +19,7 @@
|
|||||||
static NSMutableDictionary *viewControllerMapping;
|
static NSMutableDictionary *viewControllerMapping;
|
||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
viewControllerMapping = [@{
|
viewControllerMapping = [@{
|
||||||
@"textFieldListForm" : [[MVMCoreViewControllerProgrammaticMappingObject alloc] initWithClass:[MVMCoreUITextFieldListFormViewController class]],
|
@"textFieldListForm" : [[MVMCoreViewControllerProgrammaticMappingObject alloc] initWithClass:[TextFieldListFormViewController class]],
|
||||||
@"moleculeStack" : [[MVMCoreViewControllerProgrammaticMappingObject alloc] initWithClass:[MoleculeStackTemplate class]],
|
@"moleculeStack" : [[MVMCoreViewControllerProgrammaticMappingObject alloc] initWithClass:[MoleculeStackTemplate class]],
|
||||||
@"centerMoleculeStack" : [[MVMCoreViewControllerProgrammaticMappingObject alloc] initWithClass:[MoleculeStackCenteredTemplate class]]
|
@"centerMoleculeStack" : [[MVMCoreViewControllerProgrammaticMappingObject alloc] initWithClass:[MoleculeStackCenteredTemplate class]]
|
||||||
} mutableCopy];
|
} mutableCopy];
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
public class MVMCoreUITextFieldListFormViewController: TopLabelsAndBottomButtonsViewController {
|
public class TextFieldListFormViewController: TopLabelsAndBottomButtonsViewController {
|
||||||
|
|
||||||
|
|
||||||
public var textFieldListView: MFTextFieldListView?
|
public var textFieldListView: MFTextFieldListView?
|
||||||
@ -9,6 +9,8 @@
|
|||||||
#import "MVMCoreUIUtility.h"
|
#import "MVMCoreUIUtility.h"
|
||||||
#import "MVMCoreUIConstants.h"
|
#import "MVMCoreUIConstants.h"
|
||||||
#import "MVMCoreUISession.h"
|
#import "MVMCoreUISession.h"
|
||||||
|
#import "MVMCoreUINavigationController.h"
|
||||||
|
#import "MVMCoreUISplitViewController.h"
|
||||||
@import MVMCore.MVMCoreNavigationHandler;
|
@import MVMCore.MVMCoreNavigationHandler;
|
||||||
@import MVMCore.MVMCoreGetterUtility;
|
@import MVMCore.MVMCoreGetterUtility;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user