在IB中创建的NSWindow将不会在应用程序中以模态方式显示

时间:2010-10-26 21:55:47

标签: objective-c cocoa interface-builder nswindow nswindowcontroller

我有一个应用程序,当按下按钮时,它应该显示一个模态窗口。我对此有一些疑问,但我会将其缩小到令我头疼的问题。

我想补充一点,我已经做了类似的事情,当应用于这种特殊情况时将无效。我已经做的是以模态方式显示NSOpenPanel。这是它的代码。

此代码位于appDelegate中。

-(IBAction) respondToPublishAction:(id) sender {
    NSArray *fileTypes = [NSArray arrayWithObjects:@"xml", @"txt", nil];

    NSOpenPanel *oPanel = [NSOpenPanel openPanel];

    NSString *startingDir = [[NSUserDefaults standardUserDefaults] objectForKey:@"StartingDirectory"];

    if (!startingDir)
        startingDir = NSHomeDirectory();

//Setting the attributes
[oPanel setAllowsMultipleSelection:NO];
[oPanel setTitle:@"XML file for publishing services"];
[oPanel beginSheetForDirectory:startingDir file:nil types:fileTypes
                modalForWindow:[self window] modalDelegate:self
                didEndSelector:@selector(openPanelDidEnd:returnCode:contextInfo:)
                   contextInfo:nil];
}

现在我正在尝试做什么,那将无效

我创建了一个xib文件,它有一个HUD窗口(如何在IB中命名),就像一个NSPanel。我创建了一个窗口按钮,用于监听按钮(testButton)。这是代码:

@interface BrowserWindowController : NSWindowController {
}
-(IBAction) testButton:(id) sender;
@end

我将xib文件的文件所有者设置为BrowserWindowController类,并将按钮与testbutton链接。

单击按钮时返回appDelegate我想以模态方式显示此面板。这是代码:

- (IBAction) respondToBrowseAction:(id) sender {
browsePanel = [[BrowserWindowController alloc] initWithWindowNibName:@"BroserWindow"];
}

我没有看到像NSOpenPanel这样的API中的任何函数以模态方式显示此窗口。

对任何可能回答的人都是。

1 个答案:

答案 0 :(得分:0)

没有用于模态运行的NSWindow API的原因是因为它是进入模态模式的应用程序。请参阅How Modal Windows WorkIntroduction to Sheets