Merge branch 'hotfix/tileContainer-refactor' into 'develop'
refactor for use in both UIControl and UIView See merge request BPHV_MIPS/vds_ios!281
This commit is contained in:
commit
c8502610f2
@ -12,7 +12,7 @@ import Combine
|
||||
/// Base Class used to build Views.
|
||||
@objcMembers
|
||||
@objc(VDSView)
|
||||
open class View: UIView, ViewProtocol, UserInfoable {
|
||||
open class View: UIView, ViewProtocol, UserInfoable, Clickable {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializers
|
||||
@ -37,6 +37,7 @@ open class View: UIView, ViewProtocol, UserInfoable {
|
||||
//--------------------------------------------------
|
||||
open var subscribers = Set<AnyCancellable>()
|
||||
|
||||
open var onClickSubscriber: AnyCancellable?
|
||||
//--------------------------------------------------
|
||||
// MARK: - Private Properties
|
||||
//--------------------------------------------------
|
||||
|
||||
@ -154,15 +154,12 @@ open class DatePicker: EntryFieldBase {
|
||||
selectedDateLabel.textColorConfiguration = primaryColorConfiguration.eraseToAnyColorable()
|
||||
|
||||
// tap gesture
|
||||
containerView
|
||||
.publisher(for: UITapGestureRecognizer())
|
||||
.sink { [weak self] _ in
|
||||
guard let self else { return }
|
||||
if isEnabled && !isReadOnly {
|
||||
showPopover()
|
||||
}
|
||||
containerView.onClick = { [weak self] _ in
|
||||
guard let self else { return }
|
||||
if isEnabled && !isReadOnly {
|
||||
showPopover()
|
||||
}
|
||||
.store(in: &subscribers)
|
||||
}
|
||||
|
||||
NotificationCenter.default
|
||||
.publisher(for: UIDevice.orientationDidChangeNotification).sink { [weak self] _ in
|
||||
|
||||
@ -153,12 +153,9 @@ open class DropdownSelect: EntryFieldBase {
|
||||
}()
|
||||
|
||||
// tap gesture
|
||||
containerView
|
||||
.publisher(for: UITapGestureRecognizer())
|
||||
.sink { [weak self] _ in
|
||||
self?.launchPicker()
|
||||
}
|
||||
.store(in: &subscribers)
|
||||
containerView.onClick = { [weak self] _ in
|
||||
self?.launchPicker()
|
||||
}
|
||||
containerView.height(44)
|
||||
}
|
||||
|
||||
|
||||
@ -44,7 +44,7 @@ open class TileContainer: TileContainerBase<TileContainer.Padding> {
|
||||
}
|
||||
}
|
||||
|
||||
open class TileContainerBase<PaddingType: DefaultValuing>: Control where PaddingType.ValueType == CGFloat {
|
||||
open class TileContainerBase<PaddingType: DefaultValuing>: View where PaddingType.ValueType == CGFloat {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializers
|
||||
@ -118,6 +118,8 @@ open class TileContainerBase<PaddingType: DefaultValuing>: Control where Padding
|
||||
$0.setContentCompressionResistancePriority(.defaultHigh, for: .vertical)
|
||||
}
|
||||
|
||||
private var isHighlighted: Bool = false { didSet { setNeedsUpdate() } }
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
@ -337,6 +339,27 @@ open class TileContainerBase<PaddingType: DefaultValuing>: Control where Padding
|
||||
set {}
|
||||
}
|
||||
|
||||
open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
|
||||
super.touchesBegan(touches, with: event)
|
||||
if let onClickSubscriber {
|
||||
isHighlighted = true
|
||||
}
|
||||
}
|
||||
|
||||
open override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
|
||||
super.touchesEnded(touches, with: event)
|
||||
if let onClickSubscriber {
|
||||
isHighlighted = false
|
||||
}
|
||||
}
|
||||
|
||||
open override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
|
||||
super.touchesCancelled(touches, with: event)
|
||||
if let onClickSubscriber {
|
||||
isHighlighted = false
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Methods
|
||||
//--------------------------------------------------
|
||||
|
||||
@ -9,12 +9,12 @@ import Foundation
|
||||
import UIKit
|
||||
import Combine
|
||||
|
||||
public protocol Clickable: ViewProtocol where Self: UIControl {
|
||||
public protocol Clickable: ViewProtocol {
|
||||
/// Sets the primary Subscriber used for the UIControl event .touchUpInside.
|
||||
var onClickSubscriber: AnyCancellable? { get set }
|
||||
}
|
||||
|
||||
extension Clickable {
|
||||
extension Clickable where Self: UIControl {
|
||||
/// Allows the setting of a completion block against the onClickSubscriber cancellable. This will
|
||||
/// completion block will get executed against the UIControl publisher for the 'touchUpInside' action.
|
||||
public var onClick: ((Self) -> ())? {
|
||||
@ -23,7 +23,7 @@ extension Clickable {
|
||||
onClickSubscriber?.cancel()
|
||||
if let newValue {
|
||||
onClickSubscriber = publisher(for: .touchUpInside)
|
||||
.sink { [weak self] c in
|
||||
.sink { [weak self] c in
|
||||
guard let self, self.isEnabled else { return }
|
||||
newValue(c)
|
||||
}
|
||||
@ -34,3 +34,24 @@ extension Clickable {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension Clickable where Self: UIView {
|
||||
/// Allows the setting of a completion block against the onClickSubscriber cancellable. This will
|
||||
/// completion block will get executed against the UIControl publisher for the 'touchUpInside' action.
|
||||
public var onClick: ((Self) -> ())? {
|
||||
get { return nil }
|
||||
set {
|
||||
onClickSubscriber?.cancel()
|
||||
if let newValue {
|
||||
onClickSubscriber = publisher(for: UITapGestureRecognizer())
|
||||
.sink { [weak self] _ in
|
||||
guard let self, self.isEnabled else { return }
|
||||
newValue(self)
|
||||
}
|
||||
} else {
|
||||
onClickSubscriber = nil
|
||||
}
|
||||
setNeedsUpdate()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user