在大多数系统中,“打开一个新窗口”的默认行为是它出现在前面。这在 Cocoa 中不会发生,我正在尝试找到“正确”的方法来实现这种标准行为。我尝试过的大多数事情最多只能用于一个窗口。
我需要在启动时打开多个窗口:
- (N x NSDocuments(每个窗口一个)
- 1 x 简单的 NSWindowController 打开一个 NIB 文件。
不起作用的事情:
- 遍历我要打开的所有 NSDocument,然后打开它们。
怎么了?...只有调用 open 的“最后一个”出现在前面 - 其余的都是隐藏的,不可见的,在屏幕上无处可见,直到您快速切换或使用“窗口”菜单找到它们。
代码:
...documents is an array of NSPersistentDocument's, loaded from CoreData...
[NSDocumentController sharedDocumentController];
[controller openDocumentWithContentsOfURL:[documents objectAtIndex:0] display:YES error:&error];
- 在每个窗口打开后手动调用“makeKeyAndOrderFront”
怎么了?没什么不同。但是我能找到获取 NSWindow 实例的唯一方法是如此可怕,它似乎完全错误(但在几个博客和邮件列表帖子中都提到了)
代码:
[NSDocumentController sharedDocumentController];
NSDocument* openedDocument = [controller openDocumentWithContentsOfURL:[documents objectAtIndex:0] display:YES error:&error];
[[[[openedDocument windowControllers] objectAtIndex:0] window] makeKeyAndOrderFront:nil];
...我知道我做错了,但我不知道为什么/做什么不同:(。
通常但并非总是有效的东西:
- 如上所述,但只使用“showWindow”代替(我从 NSDocument 指南中获取)。
奇怪的是,这有时会奏效......即使这是苹果声称他们在内部调用的确切代码。如果他们在内部调用它,如果我在他们已经这样做之后重新调用它,为什么它的行为会有所不同?
[[[openedDocument windowControllers] objectAtIndex:0] showWindow:self];