【问题标题】:How to get reference of base NSView used by NSPopover如何获取 NSPopover 使用的基本 NSView 的参考
【发布时间】:2023-04-07 00:43:02
【问题描述】:

这个问题很简单。我有一个 NSPopover 属性,当用户单击我的 NSView 时,我用它来显示一些信息。以下是我展示弹出框的方式:

[self.boxPopover showRelativeToRect:NSMakeRect(0, 0, POPOVER_SIZE, POPOVER_SIZE) ofView:_clickedBox preferredEdge:NSMinYEdge];

问题是:有没有办法从popover中获取参数ofView使用的view的引用?

用户可以在这个 NSViews 中点击很多,我用这个 iVar 跟踪。我正在做一项功能,需要查看新显示的视图是否与前一个视图不同(或不同)。

我想要类似的东西:

if (self.boxPopover.viewDisplayed != _clickedBox) ...

有没有办法从 popover 中获取这个引用或者这真的不可能?

提前致谢,

【问题讨论】:

    标签: objective-c macos nsview nspopover


    【解决方案1】:

    如果您查看 Xcode 的 AppKit/NSPopover.h,您会在 NSPopover 对象中看到:

    NS_CLASS_AVAILABLE(10_7, NA)
    @interface NSPopover : NSResponder {
    @private
        ...
        ...
        id <NSPopoverDelegate> _delegate;
        ...
        ...
        NSView *_positioningView;
        ...
        ...
    

    因此,popover 对象保留了一个指向其定位视图的指针,但也将其保持为私有,因此子类将无法使用它。

    您可以做的一件事是write a category extension 到 NSPopover 添加一个 API 以返回 _positioningView。

    【讨论】:

    • 好主意,我会试试的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多