Как получить ссылку на базовый NSView, используемый NSPopover

Вопрос довольно простой. У меня есть свойство NSPopover, которое я использую для представления некоторой информации, когда пользователь щелкает в моем NSView. Вот как я представляю поповер:

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

Вопрос в следующем: есть ли способ получить ссылку на представление, используемое параметром? ofView из поповера?

Пользователь может много щелкать по этим NSView, которые я отслеживаю с этим iVar. Я делаю функцию, которая потребует, чтобы увидеть, отличается ли новый отображаемый вид (или нет) от предыдущего.

Я хочу что-то вроде:

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

Есть ли способ получить эту ссылку из поповера или это действительно невозможно?

Заранее спасибо,

1 ответ

Решение

Если вы посмотрите на свой Xcode AppKit/NSPopover.h, вы увидите это в объекте NSPopover:

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

Таким образом, объект popover сохраняет указатель на свое позиционирующее представление, но также сохраняет его закрытым, поэтому он не будет доступен для подклассов.

Одна вещь, которую вы могли бы сделать, это написать расширение категории для NSPopover, чтобы добавить API для возврата _positioningView.

Другие вопросы по тегам