mvm_core_ui/MVMCoreUI/Molecules/ButtonView.swift
Pfeil, Scott Robert 161f3e9f08 reset function.
standard spacing for cell molecule
MFTextField to view contstraining view
constraining protocol
2019-06-04 12:42:52 -04:00

144 lines
4.5 KiB
Swift

//
// ButtonView.swift
// MVMCoreUI
//
// Created by Scott Pfeil on 3/21/19.
// Copyright © 2019 Verizon Wireless. All rights reserved.
//
import UIKit
@objcMembers open class ButtonView: ViewConstrainingView {
open var primaryButton: PrimaryButton? = PrimaryButton.button()
open var alignCenterPin: NSLayoutConstraint?
open var alignCenterLeftPin: NSLayoutConstraint?
open var alignCenterRightPin: NSLayoutConstraint?
// MARK: - Inits
public init() {
super.init(frame: .zero)
}
public override init(frame: CGRect) {
super.init(frame: frame)
}
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
public convenience init(buttonSmall small: Bool, enabled: Bool) {
self.init()
primaryButton?.setAsSmall(small)
primaryButton?.isEnabled = enabled
}
public init(withJSON json: [AnyHashable: Any]?, additionalData: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?) {
super.init(frame: .zero)
setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData)
}
// MARK: - MVMCoreViewProtocol
open override func reset() {
primaryButton?.reset()
}
open override func updateView(_ size: CGFloat) {
super.updateView(size)
MVMCoreDispatchUtility.performBlock(onMainThread: {
self.primaryButton?.updateView(size)
})
}
open override func setupView() {
super.setupView()
setupButton()
alignCenter()
}
// MARK: - MVMCoreUIMoleculeViewProtocol
open override func setAsMolecule() {
super.setAsMolecule()
primaryButton?.setAsMolecule()
}
open override func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) {
super.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData)
primaryButton?.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData)
}
public override static func estimatedHeight(forRow json: [AnyHashable : Any]?) -> CGFloat {
return 42
}
// MARK: - Constraining
func setupButton() {
if let primaryButton = primaryButton, !subviews.contains(primaryButton) {
addSubview(primaryButton)
setupConstraints(forView: primaryButton)
}
}
func setupConstraints(forView view: UIView) {
leftPin = view.leftAnchor.constraint(equalTo: leftAnchor)
topPin = view.topAnchor.constraint(equalTo: topAnchor)
rightPin = rightAnchor.constraint(equalTo: view.rightAnchor)
bottomPin = bottomAnchor.constraint(equalTo: view.bottomAnchor)
leftPin?.isActive = true
topPin?.isActive = true
rightPin?.isActive = true
bottomPin?.isActive = true
alignCenterPin = view.centerXAnchor.constraint(equalTo: centerXAnchor)
alignCenterLeftPin = view.leftAnchor.constraint(greaterThanOrEqualTo: leftAnchor)
alignCenterRightPin = rightAnchor.constraint(greaterThanOrEqualTo: view.rightAnchor)
}
open func alignLeft() {
alignCenterPin?.isActive = false
alignCenterLeftPin?.isActive = false
alignCenterRightPin?.isActive = true
leftPin?.isActive = true
rightPin?.isActive = false
}
open func alignCenter() {
alignCenterPin?.isActive = true
alignCenterLeftPin?.isActive = true
alignCenterRightPin?.isActive = true
leftPin?.isActive = false
rightPin?.isActive = false
}
open func alignRight() {
alignCenterPin?.isActive = false
alignCenterLeftPin?.isActive = true
alignCenterRightPin?.isActive = false
leftPin?.isActive = false
rightPin?.isActive = true
}
open func alignFill() {
alignCenterPin?.isActive = false
alignCenterLeftPin?.isActive = false
alignCenterRightPin?.isActive = false
leftPin?.isActive = true
rightPin?.isActive = true
}
open override func setLeftPinConstant(_ constant: CGFloat) {
super.setLeftPinConstant(constant)
alignCenterLeftPin?.constant = constant
}
open override func setRightPinConstant(_ constant: CGFloat) {
super.setRightPinConstant(constant)
alignCenterRightPin?.constant = constant
}
open override func resetConstraints() {
super.resetConstraints()
primaryButton?.isEnabled = false
}
}