Как придать фокус NSWindow, загруженному из NIB? - PullRequest
4 голосов
/ 13 марта 2011

Я использую 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?

Ответы [ 2 ]

11 голосов
/ 13 марта 2011

Хорошо, я нашел причину этой проблемы.

Владелец файла xib должен быть установлен на контроллере, и (это та часть, о которой я не знал), вы должны подключить контроллер window выход к самому окну.

Сделав это, он просто работает.Нет makeKeyWindow, makeMainWindow или makeKeyAndOrderFront: необходимо.

1 голос
/ 13 марта 2011

Возможно makeMainWindow: или makeKeyWindow: помогает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...