1

環境

をNSPopoverPとし、viewに含まれるサブビューである NSView にしますP

私が必要なもの

のフレームを取得して、画面の座標系viewに変換したい。通常、次のようにします。

NSRect frameRelativeToWindow = [self convertRect:self.frame relativeToView:nil]; 
[self.window convertRectToScreen:frameRelativeToWindow];

ただし、viewは NSPopover にあるため、そのwindowプロパティは nil であり、上記のメソッドは NSZeroRect: [0, 0, 0, 0] を返します。

では、ビューが NSPopover にある場合、ビューのフレームを画面座標で取得するにはどうすればよいでしょうか?

ノート:

  1. NSPopover は画面上に表示されます。
  2. フレームを画面座標に変換しようとしているビューは、NSPopover またはその contentView の直接のサブビューではありません。問題のビューは、実際には、NSClipView 内の NSScrollView 内の NSTableView 内の NSTableCellView 内のカスタム NSView です。clipView は、NSPopover の contentView の直接のサブビューです。
  3. 通常の NSWindow では、任意のサブビュー[self window]を取得して呼び出し、含まれている NSWindow オブジェクトを取得できます。ただし、ポップオーバーでそれを行うと、nil が返されます。
4

2 に答える 2