200 lines
9.3 KiB
Swift
200 lines
9.3 KiB
Swift
//
|
|
// TwoButtonView.swift
|
|
// MVMCoreUI
|
|
//
|
|
// Created by Scott Pfeil on 3/21/19.
|
|
// Copyright © 2019 Verizon Wireless. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
@objcMembers open class TwoButtonView: ButtonView {
|
|
open var secondaryButton: PrimaryButton?
|
|
open var viewForButtons = MVMCoreUICommonViewsUtility.commonView()
|
|
public var heightConstraint: NSLayoutConstraint?
|
|
|
|
public override init() {
|
|
super.init(frame: .zero)
|
|
}
|
|
|
|
required public init?(coder aDecoder: NSCoder) {
|
|
super.init(coder: aDecoder)
|
|
}
|
|
|
|
public override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
}
|
|
|
|
// MARK: - MVMCoreViewProtocol
|
|
open override func updateView(_ size: CGFloat) {
|
|
super.updateView(size)
|
|
MVMCoreDispatchUtility.performBlock(onMainThread: {
|
|
self.secondaryButton?.updateView(size)
|
|
})
|
|
}
|
|
|
|
// MARK: - MVMCoreUIMoleculeViewProtocol
|
|
open override func setWithJSON(_ json: [AnyHashable : Any]?, delegate: NSObject?, additionalData: [AnyHashable : Any]?) {
|
|
super.setWithJSON(json, delegate: delegate, additionalData: additionalData)
|
|
if let backgroundColorString = json?.optionalStringForKey(KeyBackgroundColor) {
|
|
backgroundColor = UIColor.mfGet(forHex: backgroundColorString)
|
|
}
|
|
let primaryButtonMap = json?.optionalDictionaryForKey("primaryButton")
|
|
let secondaryButtonMap = json?.optionalDictionaryForKey("secondaryButton")
|
|
setupUI(withPrimaryButtonMap: primaryButtonMap, secondaryButtonMap: secondaryButtonMap)
|
|
primaryButton?.setAsStandardCustom()
|
|
secondaryButton?.setAsSecondaryCustom()
|
|
primaryButton?.setWithJSON(primaryButtonMap, delegate: delegate, additionalData: additionalData)
|
|
secondaryButton?.setWithJSON(secondaryButtonMap, delegate: delegate, additionalData: additionalData)
|
|
}
|
|
|
|
// MARK: - Constraining
|
|
override func setupButton() {
|
|
guard viewForButtons.superview != self else {
|
|
return
|
|
}
|
|
addSubview(viewForButtons)
|
|
setupConstraints(forView: viewForButtons)
|
|
setupWithTwoButtons()
|
|
}
|
|
|
|
open func setupWithTwoButtons() {
|
|
guard viewForButtons != primaryButton?.superview && viewForButtons != secondaryButton?.superview else {
|
|
return
|
|
}
|
|
if let primaryButton = primaryButton {
|
|
primaryButton.removeFromSuperview()
|
|
} else {
|
|
primaryButton = PrimaryButton.button()
|
|
}
|
|
if let secondaryButton = secondaryButton {
|
|
secondaryButton.removeFromSuperview()
|
|
} else {
|
|
secondaryButton = PrimaryButton.button()
|
|
secondaryButton?.bordered = true
|
|
}
|
|
guard let primaryButton = primaryButton, let secondaryButton = secondaryButton else {
|
|
return
|
|
}
|
|
viewForButtons.addSubview(primaryButton)
|
|
viewForButtons.addSubview(secondaryButton)
|
|
secondaryButton.widthAnchor.constraint(equalTo: primaryButton.widthAnchor, multiplier: 1).isActive = true
|
|
secondaryButton.topAnchor.constraint(equalTo: viewForButtons.topAnchor).isActive = true
|
|
primaryButton.topAnchor.constraint(equalTo: viewForButtons.topAnchor).isActive = true
|
|
viewForButtons.bottomAnchor.constraint(equalTo: secondaryButton.bottomAnchor).isActive = true
|
|
viewForButtons.bottomAnchor.constraint(equalTo: primaryButton.bottomAnchor).isActive = true
|
|
NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[leftButton]-10-[rightButton]-0-|", options: NSLayoutConstraint.FormatOptions.alignAllCenterY, metrics: nil, views: ["leftButton": secondaryButton, "rightButton": primaryButton]))
|
|
}
|
|
|
|
open func setupWithPrimaryButton() {
|
|
primaryButton?.removeFromSuperview()
|
|
secondaryButton?.removeFromSuperview()
|
|
secondaryButton = nil
|
|
if primaryButton == nil {
|
|
primaryButton = PrimaryButton.button()
|
|
}
|
|
setupWithOneButton(primaryButton!)
|
|
}
|
|
|
|
open func setupWithSecondaryButton() {
|
|
primaryButton?.removeFromSuperview()
|
|
secondaryButton?.removeFromSuperview()
|
|
primaryButton = nil
|
|
if secondaryButton == nil {
|
|
secondaryButton = PrimaryButton.button()
|
|
secondaryButton?.bordered = true
|
|
}
|
|
setupWithOneButton(secondaryButton!)
|
|
}
|
|
|
|
func setupWithOneButton(_ button: PrimaryButton) {
|
|
viewForButtons.addSubview(button)
|
|
button.topAnchor.constraint(equalTo: viewForButtons.topAnchor).isActive = true
|
|
button.leftAnchor.constraint(equalTo: viewForButtons.leftAnchor).isActive = true
|
|
viewForButtons.rightAnchor.constraint(equalTo: button.rightAnchor).isActive = true
|
|
viewForButtons.bottomAnchor.constraint(equalTo: button.bottomAnchor).isActive = true
|
|
}
|
|
|
|
open func setupUI(withPrimaryButtonMap primaryButtonMap: [AnyHashable: Any]?, secondaryButtonMap: [AnyHashable: Any]?) {
|
|
if primaryButtonMap != nil, secondaryButtonMap != nil {
|
|
heightConstraint?.isActive = false
|
|
setupWithTwoButtons()
|
|
} else if primaryButtonMap != nil || secondaryButtonMap != nil {
|
|
heightConstraint?.isActive = false
|
|
setupWithPrimaryButton()
|
|
} else {
|
|
primaryButton?.removeFromSuperview()
|
|
secondaryButton?.removeFromSuperview()
|
|
primaryButton = nil
|
|
secondaryButton = nil
|
|
if heightConstraint == nil {
|
|
self.heightConstraint = heightAnchor.constraint(equalToConstant: 0)
|
|
self.heightConstraint?.isActive = true
|
|
}
|
|
}
|
|
}
|
|
|
|
// MARK: - Legacy
|
|
open func setup(withButtonMap buttonMap: [AnyHashable: Any]?, actionDelegate: NSObjectProtocol?, additionalData: [AnyHashable: Any]?, buttonDelegate: Any?) {
|
|
let secondaryButtonMap = buttonMap?.optionalDictionaryForKey(KeySecondaryButton)
|
|
let primaryButtonMap = buttonMap?.optionalDictionaryForKey(KeyPrimaryButton)
|
|
setup(primaryButtonMap: primaryButtonMap, secondaryButtonMap: secondaryButtonMap, actionDelegate: actionDelegate, additionalData: additionalData, buttonDelegate: buttonDelegate)
|
|
}
|
|
|
|
open func setup(primaryButtonMap: [AnyHashable: Any]?, secondaryButtonMap: [AnyHashable: Any]?, actionDelegate: NSObjectProtocol?, additionalData: [AnyHashable: Any]?, buttonDelegate: Any?) {
|
|
setupUI(withPrimaryButtonMap: primaryButtonMap, secondaryButtonMap: secondaryButtonMap)
|
|
if primaryButtonMap != nil, secondaryButtonMap != nil {
|
|
primaryButton?.setWithActionMap(primaryButtonMap, actionDelegate: actionDelegate as? MVMCoreActionDelegateProtocol & NSObjectProtocol, additionalData: additionalData, buttonDelegate: buttonDelegate as? ButtonDelegateProtocol)
|
|
secondaryButton?.setWithActionMap(secondaryButtonMap, actionDelegate: actionDelegate as? MVMCoreActionDelegateProtocol & NSObjectProtocol, additionalData: additionalData, buttonDelegate: buttonDelegate as? ButtonDelegateProtocol)
|
|
} else if primaryButtonMap != nil {
|
|
primaryButton?.setWithActionMap(primaryButtonMap, actionDelegate: actionDelegate as? MVMCoreActionDelegateProtocol & NSObjectProtocol, additionalData: additionalData, buttonDelegate: buttonDelegate as? ButtonDelegateProtocol)
|
|
} else {
|
|
primaryButton?.setWithActionMap(secondaryButtonMap, actionDelegate: actionDelegate as? MVMCoreActionDelegateProtocol & NSObjectProtocol, additionalData: additionalData, buttonDelegate: buttonDelegate as? ButtonDelegateProtocol)
|
|
}
|
|
}
|
|
|
|
public convenience init(buttonSmall small: Bool, enabled: Bool) {
|
|
self.init()
|
|
setupWithPrimaryButton()
|
|
primaryButton?.setAsSmall(small)
|
|
primaryButton?.isEnabled = enabled
|
|
}
|
|
|
|
public convenience init(buttonSmall small: Bool, buttonMap: [AnyHashable: Any]?, actionDelegate: NSObjectProtocol?, additionalData: [AnyHashable: AnyHashable]?, buttonDelegate: Any?) {
|
|
self.init()
|
|
setup(withButtonMap: buttonMap, actionDelegate: actionDelegate, additionalData: additionalData, buttonDelegate: buttonMap)
|
|
primaryButton?.setAsSmall(small)
|
|
secondaryButton?.setAsSmall(small)
|
|
}
|
|
|
|
public convenience init(primaryButtonMap: [AnyHashable: Any]?, secondaryButtonMap: [AnyHashable: Any]?, actionDelegate: NSObjectProtocol?, additionalData: [AnyHashable: Any]?, buttonDelegate: Any?) {
|
|
self.init()
|
|
setup(primaryButtonMap: primaryButtonMap, secondaryButtonMap: secondaryButtonMap, actionDelegate: actionDelegate, additionalData: additionalData, buttonDelegate: buttonDelegate)
|
|
}
|
|
|
|
public func hidePrimaryLeftButton() {
|
|
if let secondaryButton = secondaryButton, !secondaryButton.isHidden {
|
|
secondaryButton.isHidden = true
|
|
setupWithPrimaryButton()
|
|
}
|
|
}
|
|
|
|
public func hidePrimaryRightButton() {
|
|
if let primaryButton = primaryButton, !primaryButton.isHidden {
|
|
primaryButton.isHidden = true
|
|
setupWithSecondaryButton()
|
|
}
|
|
}
|
|
|
|
public func showBothPrimaryButtons() {
|
|
primaryButton?.isHidden = false
|
|
secondaryButton?.isHidden = false
|
|
setupWithTwoButtons()
|
|
}
|
|
|
|
public func hideBothPrimaryButtons() {
|
|
primaryButton?.isHidden = true
|
|
secondaryButton?.isHidden = true
|
|
}
|
|
}
|