mirror of
https://github.com/luxfi/safe-ios.git
synced 2026-10-30 15:19:20 +00:00
84 lines
2.4 KiB
Swift
84 lines
2.4 KiB
Swift
//
|
|
// Copyright © 2019 Gnosis Ltd. All rights reserved.
|
|
//
|
|
import UIKit
|
|
|
|
public class TooltipSource: TooltipDelegate {
|
|
|
|
private weak var tooltip: Tooltip?
|
|
private weak var target: UIView?
|
|
private var arrowTarget: UIView?
|
|
|
|
private var onTap: (() -> Void)?
|
|
private var onAppear: (() -> Void)?
|
|
private var onDisappear: (() -> Void)?
|
|
|
|
public var isActive: Bool = true
|
|
public var message: String?
|
|
public var aboveTarget: Bool = true
|
|
public var hideAutomatically: Bool = false
|
|
|
|
public init(target: UIView,
|
|
arrowTarget: UIView? = nil,
|
|
onTap: (() -> Void)? = nil,
|
|
onAppear: (() -> Void)? = nil,
|
|
onDisappear: (() -> Void)? = nil) {
|
|
self.target = target
|
|
self.arrowTarget = arrowTarget
|
|
self.onTap = onTap
|
|
self.onAppear = onAppear
|
|
self.onDisappear = onDisappear
|
|
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(didTap))
|
|
tapRecognizer.cancelsTouchesInView = false
|
|
target.addGestureRecognizer(tapRecognizer)
|
|
target.isUserInteractionEnabled = true
|
|
}
|
|
|
|
@objc private func hideTooltip() {
|
|
if let tooltip = self.tooltip, tooltip.isVisible {
|
|
tooltip.hide()
|
|
}
|
|
}
|
|
|
|
@objc private func didTap() {
|
|
if let tooltip = self.tooltip, tooltip.isVisible {
|
|
tooltip.hide()
|
|
return
|
|
}
|
|
|
|
guard isActive,
|
|
let message = self.message, !message.isEmpty,
|
|
let window = UIApplication.shared.keyWindow,
|
|
let target = target else { return }
|
|
// show only one at all times
|
|
Self.hideAll()
|
|
|
|
tooltip = Tooltip.show(
|
|
for: target,
|
|
in: window,
|
|
message: message,
|
|
arrowTarget: arrowTarget,
|
|
aboveTarget: aboveTarget,
|
|
hideAutomatically: hideAutomatically,
|
|
delegate: self)
|
|
|
|
onTap?()
|
|
}
|
|
|
|
public func tooltipWillAppear(_ tooltip: Tooltip) {
|
|
onAppear?()
|
|
}
|
|
|
|
public func tooltipWillDisappear(_ tooltip: Tooltip) {
|
|
onDisappear?()
|
|
}
|
|
|
|
static func hideAll() {
|
|
guard let window = UIApplication.shared.keyWindow else { return }
|
|
let allTooltips = window.subviews.compactMap { $0 as? Tooltip }
|
|
for tooltip in allTooltips {
|
|
tooltip.hide()
|
|
}
|
|
}
|
|
}
|