mirror of
https://github.com/divkit/divkit.git
synced 2026-05-07 20:02:32 +00:00
TooltipHostView protocol implemented
commit_hash:7738aeb8a1c7e41a279d409009fc4b663e3204cf
This commit is contained in:
@@ -19140,6 +19140,7 @@
|
||||
"client/ios/LayoutKit/LayoutKit/GenericViewBlock.swift":"divkit/public/client/ios/LayoutKit/LayoutKit/GenericViewBlock.swift",
|
||||
"client/ios/LayoutKit/LayoutKit/Tooltips/TooltipAnchorView.swift":"divkit/public/client/ios/LayoutKit/LayoutKit/Tooltips/TooltipAnchorView.swift",
|
||||
"client/ios/LayoutKit/LayoutKit/Tooltips/TooltipFactory.swift":"divkit/public/client/ios/LayoutKit/LayoutKit/Tooltips/TooltipFactory.swift",
|
||||
"client/ios/LayoutKit/LayoutKit/Tooltips/TooltipHostView.swift":"divkit/public/client/ios/LayoutKit/LayoutKit/Tooltips/TooltipHostView.swift",
|
||||
"client/ios/LayoutKit/LayoutKit/Tooltips/TooltipManager.swift":"divkit/public/client/ios/LayoutKit/LayoutKit/Tooltips/TooltipManager.swift",
|
||||
"client/ios/LayoutKit/LayoutKit/Tooltips/TooltipPresenter.swift":"divkit/public/client/ios/LayoutKit/LayoutKit/Tooltips/TooltipPresenter.swift",
|
||||
"client/ios/LayoutKit/LayoutKit/Tooltips/ViewTooltipPresenter.swift":"divkit/public/client/ios/LayoutKit/LayoutKit/Tooltips/ViewTooltipPresenter.swift",
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
import Foundation
|
||||
|
||||
/// A view that can host tooltip display, serving as an alternative to the window-based approach.
|
||||
///
|
||||
/// Conforming to this protocol allows a view to act as a
|
||||
/// container for tooltip presentation. When set on `DefaultTooltipManager`, tooltips will be
|
||||
/// displayed within the host view's hierarchy instead of a separate `UIWindow`.
|
||||
public protocol TooltipHostView: ViewType {
|
||||
/// The bounds available for tooltip positioning, typically inset by safe area.
|
||||
var tooltipContainerBounds: CGRect { get }
|
||||
|
||||
/// Adds a tooltip view to the host's view hierarchy.
|
||||
func addTooltipView(_ view: ViewType)
|
||||
}
|
||||
@@ -93,7 +93,7 @@ public class DefaultTooltipManager: TooltipManager {
|
||||
public init(
|
||||
shownTooltips: Property<Set<String>> = Property(),
|
||||
handleAction: @escaping (UIActionEvent) -> Void = { _ in },
|
||||
externalView: UIView? = nil
|
||||
externalView: TooltipHostView? = nil
|
||||
) {
|
||||
self.presenter = externalView.map { ViewTooltipPresenter(containerView: $0) }
|
||||
?? WindowTooltipPresenter()
|
||||
|
||||
@@ -3,19 +3,19 @@ import UIKit
|
||||
import VGSL
|
||||
|
||||
final class ViewTooltipPresenter: TooltipPresenter {
|
||||
private let containerView: UIView
|
||||
private let containerView: TooltipHostView
|
||||
|
||||
init(containerView: UIView) {
|
||||
init(containerView: TooltipHostView) {
|
||||
self.containerView = containerView
|
||||
}
|
||||
|
||||
func prepare() -> (constraint: CGRect, coordinateSpace: UIView?)? {
|
||||
(containerView.bounds, containerView)
|
||||
(containerView.tooltipContainerBounds, containerView)
|
||||
}
|
||||
|
||||
func present(_ view: TooltipContainerView, for tooltip: DefaultTooltipManager.Tooltip) {
|
||||
containerView.addSubview(view)
|
||||
view.frame = containerView.bounds
|
||||
containerView.addTooltipView(view)
|
||||
view.frame = containerView.tooltipContainerBounds
|
||||
if tooltip.params.mode == .modal {
|
||||
view.accessibilityViewIsModal = true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user