TooltipHostView protocol implemented

commit_hash:7738aeb8a1c7e41a279d409009fc4b663e3204cf
This commit is contained in:
booster
2026-03-25 16:40:06 +03:00
parent f485745242
commit 44f8d4e273
4 changed files with 21 additions and 6 deletions
+1
View File
@@ -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
}