2

もっと具体的にできたらいいのにと思いますが、残念ながらできません。すべての適切なオブジェクトはnil以外であり、すべての適切なメソッド呼び出しは(おそらく)正常に実行されていますが、私NSPopoverのものは表示されません。デリゲートメソッドも呼び出されません。

// ivars
NSPopover *tagPopover;
NSViewController *tagPopoverViewController;

// in method to display popover
tagPopover = [[NSPopover alloc] init];
[tagPopover setBehavior: NSPopoverBehaviorApplicationDefined];
[tagPopover setDelegate: self];
tagPopoverViewController = [[MYViewController alloc] initWithNibName: @"MYViewController" bundle: nil];
[tagPopover setContentViewController: tagPopoverViewController];
[tagPopover setContentSize: tagPopoverViewController.view.frame.size];

[tagPopover showRelativeToRect: NSMakeRect(700, 400, 5, 5) // Screen coordinates
                        ofView: [[NSApp keyWindow] contentView]
                 preferredEdge: NSMinYEdge];
4

2 に答える 2

3

座標系が間違っていたことが判明しました:

NSRect theRect = [[NSApp keyWindow] convertRectFromScreen: NSMakeRect(700, 400, 5, 5)];
[tagPopover showRelativeToRect: theRect // Window Coordinates
                        ofView: [[NSApp keyWindow] contentView]
                 preferredEdge: NSMinYEdge];

最初にウィンドウの座標系に変換する必要があります。

于 2012-07-15T22:48:46.720 に答える
1

フレームは画面に表示される前に設定されているため、これはNSZeroRectだtagPopoverViewController.view.frameと思います(たとえば、xibs /ストーリーボードから出てくるので意味がありません)。その行が必要ですか?ドキュメントには、contentSizeはとにかくcontent-viewのサイズにバインドされていると記載されています。

于 2012-07-15T19:56:21.263 に答える