Я использую 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:
Недавно созданный Window xib без изменений.
MainMenu.xib:
MainMenu.xib по умолчанию с удаленным окном.
Вызов makeKeyAndOrderFront:
в окне в методе windowDidLoad
контроллера, похоже, не фокусирует новое окно. Установка владельца файла FooWindow.xib на FooController
также не помогла.
Как правильно загрузить и отобразить окно из NIB, чтобы оно получало фокус клавиатуры?
Изменить: похоже, что метод NSWindowController
window
возвращает nil
, что объясняет, почему вызов методов на window
ничего не делает. Но почему это nil
?