使用 [NSBundle loadNibNamed:owner:] 加载 NIB,但窗口未出现在前台
Posted
技术标签:
【中文标题】使用 [NSBundle loadNibNamed:owner:] 加载 NIB,但窗口未出现在前台【英文标题】:Loading NIB using [NSBundle loadNibNamed:owner:] but the window does not appear in the foreground 【发布时间】:2010-04-26 14:15:01 【问题描述】:我编写了一个没有持久窗口或标准菜单的菜单应用程序。当另一个应用程序获得焦点并且我使用 menulet 触发要打开的窗口时,它会出现在前台应用程序的后面(但在屏幕上出现的任何其他内容之上)。
基本上...
-(IBAction)aboutWindow:(id)sender
[NSBundle loadNibNamed:@"About" owner:self];
谁能指出我正确的方向,以便我可以让这个窗口在最初生成时出现在所有其他应用程序之上?
[编辑]
我尝试使用自定义 NSWindowController 并链接窗口,并 awakeFromNib 调用 makekeyandorderfront 方法,但这没有做任何事情。
我现在有而不是 NSBundle 调用:
NSWindowController* awc = [[NSWindowController alloc] initWithWindowNibName:@"About"];
[[awc window] makeKeyAndOrderFront:nil];
这会产生窗口,但仍然没有在前台显示
【问题讨论】:
nib 包含:文件所有者 (NSObject)、First Responder、应用程序、窗口 (NSWindow) -> 内容视图 -> 静态文本、静态文本。 【参考方案1】:想通了。窗口没有任何问题,它是应用程序。它不在前台,因为它的性质是在生成此菜单之前没有窗口的菜单。最终代码:
-(IBAction)aboutWindow:(id)sender
NSWindowController* awc = [[NSWindowController alloc] initWithWindowNibName:@"About"];
[[awc window] makeKeyAndOrderFront:nil];
[[NSApplication sharedApplication] arrangeInFront:nil];
【讨论】:
【参考方案2】:你可以试试makeKeyAndOrderFront:
例如,在 About 窗口的控制器中 - 假设控制器对该窗口的引用为 myWindow
:
- (void)awakeFromNib
[myWindow makeKeyAndOrderFront:nil];
【讨论】:
好的,我尝试在自定义 NSWindowController 中使用它,但没有效果。我现在已经删除了我原来的 NSBundle 调用并且有: NSWindowController* awc = [[NSWindowController alloc] initWithWindowNibName:@"About"]; [[awc 窗口] makeKeyAndOrderFront:nil];这产生了窗口,但仍然没有使它在前景中以上是关于使用 [NSBundle loadNibNamed:owner:] 加载 NIB,但窗口未出现在前台的主要内容,如果未能解决你的问题,请参考以下文章
是啥导致 [[NSBundle mainBundle] loadNibNamed 中的 BUS_ADRALN?
使用 [NSBundle loadNibNamed:owner:] 加载 NIB,但窗口未出现在前台
使用方法[NSBundle loadNibNamed:xibName owner:[NSApplication sharedApplication]]加载Nib时如何传递参数?
[NSBundle loadNibNamed:owner:] 如何在 Xcode 3.1 中工作?