diff --git a/MVMCoreUI/Atoms/Buttons/Link.swift b/MVMCoreUI/Atoms/Buttons/Link.swift index 6107fce0..99a01114 100644 --- a/MVMCoreUI/Atoms/Buttons/Link.swift +++ b/MVMCoreUI/Atoms/Buttons/Link.swift @@ -8,7 +8,7 @@ import UIKit -@objcMembers open class Link: MFCustomButton { +@objcMembers open class Link: View { private lazy var sizeObject: MFSizeObject? = { return MFSizeObject(standardSize: 30, standardiPadPortraitSize: 36, iPadProLandscapeSize: 42) @@ -16,6 +16,7 @@ import UIKit private var additionalData: [AnyHashable: Any]? private var delegateObject: MVMCoreUIDelegateObject? + public let linkButton = MFCustomButton() public override init(frame: CGRect) { super.init(frame: frame) @@ -28,12 +29,12 @@ import UIKit } open override func draw(_ rect: CGRect) { - guard let textRect = self.titleLabel?.frame else { return } + guard let textRect = self.linkButton.titleLabel?.frame else { return } let contextRef = UIGraphicsGetCurrentContext() //set to the same color as the text - if let color = self.titleLabel?.textColor?.cgColor { + if let color = self.linkButton.titleLabel?.textColor?.cgColor { contextRef?.setStrokeColor(color) } @@ -49,86 +50,97 @@ import UIKit } override open func point(inside point: CGPoint, with event: UIEvent?) -> Bool { - let faultTolerance: CGFloat = 20.0 - let area = bounds.insetBy(dx: -faultTolerance, dy: -faultTolerance) + let area = linkButton.bounds.insetBy(dx: -faultTolerance, dy: -faultTolerance) return area.contains(point) } open override func touchesEnded(_ touches: Set, with event: UIEvent?) { - MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalData, delegateObject: delegateObject) + if linkButton.isEnabled { + MVMCoreActionHandler.shared()?.handleAction(with: linkButton.actionMap, additionalData: additionalData, delegateObject: delegateObject) + } } } -extension Link: MVMCoreViewProtocol { +//MARK: MVMCoreViewProtocol +extension Link { - public func updateView(_ size: CGFloat) { + public override func updateView(_ size: CGFloat) { MVMCoreDispatchUtility.performBlock(onMainThread: { [weak self] in guard let self = self else { return } - var width = size if MVMCoreGetterUtility.fequal(a: Float(CGFloat.leastNormalMagnitude), b: Float(size)) { width = MVMCoreUISplitViewController.getApplicationViewWidth() } - self.titleLabel?.font = MFStyler.fontB2(forWidth: width) - guard let heightConstraint = self.heightConstraint else { return } + self.linkButton.titleLabel?.font = MFStyler.fontB2(forWidth: width) + guard let heightConstraint = self.linkButton.heightConstraint else { return } if !MVMCoreGetterUtility.fequal(a: 0, b: Float(heightConstraint.constant)) { guard let sizeObject = self.sizeObject else { return } - self.heightConstraint?.constant = sizeObject.getValueBased(onSize: width) + self.linkButton.heightConstraint?.constant = sizeObject.getValueBased(onSize: width) } }) } - public func setupView() { + public override func setupView() { + linkButton.isUserInteractionEnabled = false + linkButton.translatesAutoresizingMaskIntoConstraints = false + addSubview(linkButton) + NSLayoutConstraint.activate([ + linkButton.leadingAnchor.constraint(equalTo: leadingAnchor), + linkButton.topAnchor.constraint(equalTo: topAnchor), + trailingAnchor.constraint(greaterThanOrEqualTo: linkButton.trailingAnchor), + bottomAnchor.constraint(equalTo: linkButton.bottomAnchor) + ]) translatesAutoresizingMaskIntoConstraints = false backgroundColor = .clear contentMode = .redraw - setTitleColor(.mfTextButton(), for: .normal) - setTitleColor(.mfCharcoal(), for: .highlighted) - // left alignment by default - titleLabel?.textAlignment = .left - contentHorizontalAlignment = .left + linkButton.setTitleColor(.mfTextButton(), for: .normal) + linkButton.setTitleColor(.mfCharcoal(), for: .highlighted) + linkButton.titleLabel?.textAlignment = .left + linkButton.contentHorizontalAlignment = .left if let constant = self.sizeObject?.standardSize { let heightConstraint = NSLayoutConstraint(item: self as Any, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: constant) addConstraint(heightConstraint) heightConstraint.isActive = true - self.heightConstraint = heightConstraint + self.linkButton.heightConstraint = heightConstraint } } } -extension Link: MVMCoreUIMoleculeViewProtocol { +//MARK: MVMCoreUIMoleculeViewProtocol +extension Link { - public func reset() { - self.setTitleColor(.mfTextButton(), for: .normal) + public override func reset() { + self.linkButton.setTitleColor(.mfTextButton(), for: .normal) + self.linkButton.isEnabled = true } - public func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { + public override func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { if let unwrappedJson = json { - actionMap = unwrappedJson + linkButton.actionMap = unwrappedJson self.additionalData = additionalData self.delegateObject = delegateObject - buttonDelegate = delegateObject?.buttonDelegate + linkButton.buttonDelegate = delegateObject?.buttonDelegate let color = unwrappedJson.stringForkey(KeyTextColor) - setTitleColor(.mfGet(forHex: color), for: .normal) + linkButton.setTitleColor(.mfGet(forHex: color), for: .normal) - titleLabel?.numberOfLines = 0 - titleLabel?.lineBreakMode = .byWordWrapping; - setTitle(actionMap?.stringForkey(KeyTitle), for: .normal) + linkButton.titleLabel?.numberOfLines = 0 + linkButton.titleLabel?.lineBreakMode = .byWordWrapping; + linkButton.setTitle(linkButton.actionMap?.stringForkey(KeyTitle), for: .normal) if let enabled = unwrappedJson[KeyEnabled] as? Bool { - isEnabled = enabled + linkButton.isEnabled = enabled } } - if let title = self.title(for: .normal), + if let title = self.linkButton.title(for: .normal), title.isEmpty { - self.heightConstraint?.constant = 0 + self.linkButton.heightConstraint?.constant = 0 } else { guard let standardSize = sizeObject?.standardSize else { return } - heightConstraint?.constant = standardSize + linkButton.heightConstraint?.constant = standardSize } }