vds_ios/VDS/Protocols/Clickable.swift
Matt Bruce 913cffe24e ONEAPP-4828 - [Accessibility] Toggle
ONEAPP-4684 - [Accessibility] Tooltip

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
2023-10-10 14:36:21 -05:00

36 lines
1.0 KiB
Swift

//
// Clickable.swift
// VDS
//
// Created by Matt Bruce on 3/29/23.
//
import Foundation
import UIKit
import Combine
public protocol Clickable: ViewProtocol where Self: UIControl {
/// Sets the primary Subscriber used for the UIControl event .touchUpInside.
var onClickSubscriber: AnyCancellable? { get set }
}
extension Clickable {
/// 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 {
if let newValue {
onClickSubscriber = publisher(for: .touchUpInside)
.sink { [weak self] c in
guard let self, self.isEnabled else { return }
newValue(c)
}
} else {
onClickSubscriber?.cancel()
onClickSubscriber = nil
}
}
}
}