Окно, вызванное "showWindow", не сфокусировано

У меня есть простое приложение строки состояния какао coredata с Xcode 4.6.2. Это ситуация:

переименованный MainMenu.xib в PreferencesWindow.xib, удалил главное меню, создал простую и работающую функцию coredata с контроллерами массива и привязками в окне. Я создал новый файл-> Пользовательский интерфейс-> Главное меню и назвал его StatusBarMenu.xib, Добавил простое меню и удалил главное меню. Создан новый файл-> target-c class-> подкласс NSObject и назвал это StatusBarController, Вот код для интерфейса:

@property IBOutlet NSMenu *statusMenu;
@property NSStatusItem *statusItem;
@property [some items for statusbar image]

реализация:

@synthesize [everything]
-(void)awakeFromNib{
    statusItem = [[NSStatusBar systemStatusBar]statusItemWithLength:NSVariableStatusItemLength];
    [some string, path and stuff for the images]
    statusItem.menu = statusMenu;
    statusItem.toolTip = @"";
    statusItem.highlightMode = YES;
}

Затем я создал еще один новый файл-> target-c class-> подкласс NSWindowController, назвал его PreferencesWindowController и оставил все как есть. Затем новый файл-> target-c class-> подкласс объектов NSO с именем PreferencesAppController. Вот код для.h:

@property (assign) IBOutlet NSWindow *mainWindow;
@property (retain) PreferencesWindowController *prefController;
-(IBAction)showPreferences:(id)sender;

.m код:

@synthesize [everything];
-(IBAction)showPreferences:(id)sender{
    if(!self.prefController)
        self.prefController = [[PreferencesWindowController alloc] initWithWindowNibName:@"PreferencesWindow"];

    [self.prefController showWindow:sender];
}

в AppDelegate файлы есть только код для coredata, ничего не добавлено. Тогда в PreferencesWindow.xib я добавил NSObject (синий куб) для PreferencesAppController с некоторыми привязками: Outlets-> mainWindow, привязанное к окну с помощью простой функции coredata. AppDelegate окно вывода привязано к тому же окну, а затем ссылка на выходы -> владелец файла, некоторые saveaction а также managedobjectcontext, в StatusBarMenu.xib я создал StatusBarController объект и привязал его к меню (outlets->statusMenu), создал еще один синий объект под названием PreferencesAppController с полученным Actions->showPreferences привязан к пункту меню.

Затем я запускаю программу, и все идет хорошо: в строке состояния появляется значок, работает раскрывающееся меню, если я нажимаю "настройки", появляется окно настроек, но... оно не сфокусировано! Это поверх других окон, но я должен щелкнуть, чтобы сделать его сфокусированным. Функции сохранения coredata работают отлично, за исключением того, что мне нужно вручную сохранять кнопкой, выход из приложения из меню строки состояния не сохраняет, но это незначительная проблема.

Почему окно не сфокусировано?

1 ответ

Решение

Из вашего описания вашего приложения в качестве "приложения строки состояния" я предполагаю, что оно предназначено для работы в фоновом режиме и не отображается в Dock.

Это означает, что ваше приложение не является активным приложением. Пользователь, щелкающий по вашему элементу статуса и выбирающий элемент из его меню, не меняет этого.

Когда приложение, которое не является активным приложением, открывает окно, это окно не получает фокус (поскольку это обычно равносильно краже фокуса с того, что пользователь делал в активном приложении).

Итак, вам нужно активировать ваше приложение.

Другие вопросы по тегам