如何设置NSOpenPanel对话框的位置和大小?

时间:2011-12-20 15:29:13

标签: objective-c cocoa nsopenpanel

我对Mac的编程经验不多,我来自Windows背景。

因此,我使用此代码显示NSOpenPanel,但我还想在对话框的屏幕上指定位置和大小。我该怎么做?

NSOpenPanel *openPanel  = [NSOpenPanel openPanel];
[openPanel setAllowsMultipleSelection:NO];
[openPanel setCanChooseDirectories:YES];
[openPanel setCanChooseFiles:NO];
NSInteger result    = [openPanel runModalForTypes:nil];

修改


似乎通过调用

[openPanel setFrame:NSMakeRect(0, 0, 500, 500) display:YES];

我可以设置NSOpenPanel的大小(它变成500x500像素),但不是它的左上角,它是以屏幕为中心,而不是出现在屏幕的左上角。

2 个答案:

答案 0 :(得分:4)

您必须继承NSOpenPanel并覆盖center方法,该方法在面板放置在屏幕上之前被调用。以下是将它放在右上角的方法:

- (void)center {

    NSRect myFrame = [self frame];
    NSRect screenFrame = [[self screen] visibleFrame];

    myFrame.size.height = round(screenFrame.size.height / 2);
    myFrame.origin.x = screenFrame.origin.x + screenFrame.size.width - myFrame.size.width;
    myFrame.origin.y = screenFrame.origin.y + screenFrame.size.height - myFrame.size.height;

    [self setFrame:myFrame display:YES];
}

答案 1 :(得分:1)

NSOpenPanel继承自NSWindow。我从来没有尝试过,但似乎你应该能够使用正常的NSWindow方法来设置它的大小和位置。