Я использую NSWindowController
для загрузки окна из NIB.Однако, когда я вызываю showWindow:
, окно визуально является верхним, но фокус остается там, где он был (вместо того, чтобы переместить его в новое окно).
Это легко увидеть, когда первое окно (с фокусом клавиатуры) перед созданием нового окна слегка перемещается (с помощью cmd + n).Вот результат:
Нижнее, сфокусированное окно - это оригинальное окно.Не сфокусированное окно сверху - это только что созданное окно.
Это соответствующий код:
AppDelegate.h:
- (IBAction)newDocument:(id) sender;
AppDelegate.m:
- (IBAction)newDocument:(id) sender {
[[[FooController alloc] init] showWindow:self];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[self newDocument:self];
}
FooController.h:
@interface FooController : NSWindowController { }
@end
FooController.m:
- (id)init {
self = [super initWithWindowNibName:@"FooWindow"];
return self;
}
FooWindow.xib:
Недавно созданный Xib Window, без изменений.
MainMenu.xib:
Файл MainMenu.xib по умолчанию с удаленным окном.
Вызов makeKeyAndOrderFront:
для окна в методе контроллера windowDidLoad
не фокусируется на новом окне.Установка владельца файла FooWindow.xib на FooController
также, похоже, не помогла.
Как правильно загрузить и показать окно из NIB, чтобы оно получало фокус клавиатуры?
Редактировать: Похоже, что NSWindowController
window
метод возвращает nil
, что объясняет, почему вызов методов на window
ничего не делает.Но почему это nil
?