2

我真的希望我能更具体,但不幸的是,我不能。所有适当的对象都是非零的,并且所有适当的方法调用都(可能)成功地进行了,但我的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

我怀疑那tagPopoverViewController.view.frame是 NSZeroRect,因为框架在它们开始出现在屏幕上之前就被设置为那个(例如,它们从 xibs/storyboards 出来时毫无意义)。你确定你需要那条线吗?文档提到 contentSize 无论如何都绑定到内容视图的大小。

于 2012-07-15T19:56:21.263 回答