gpt4 book ai didi

objective-c - 使用 "showWindow"调用的窗口未聚焦

转载 作者:行者123 更新时间:2023-12-03 16:37:12 26 4
gpt4 key购买 nike

我有一个简单的 cocoa coredata 状态栏应用程序,使用 Xcode 4.6.2。情况是这样的:

MainMenu.xib 重命名为 PreferencesWindow.xib,删除了主菜单,创建了一个简单且有效的 coredata 函数,其中包含窗口中的数组 Controller 和绑定(bind)。我创建了一个新文件->用户界面->主菜单并将其命名为StatusBarMenu.xib。添加了一个简单的菜单并删除了主菜单。创建新的 file->objective-c class->NSObject 的子类并将其命名为 StatusBarController。下面是该接口(interface)的代码:

@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;
}

然后我创建了另一个新文件->objective-c class->NSWindowController的子类,将其命名为PreferencesWindowController并保持原样。然后新建一个文件->objective-c class->NSObjects的子类,名为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 中,我为 PreferencesAppController 添加了 NSObject (蓝色立方体),并带有一些绑定(bind):Outlets-> mainWindow 绑定(bind)到带有简单 coredata 函数的窗口。 AppDelegate 将窗口导出绑定(bind)到同一窗口,然后引用 Outlets->File's Owner 委托(delegate)、一些 saveactionmanagedobjectcontext。在 StatusBarMenu.xib 中,我创建了一个 StatusBarController 对象并将其绑定(bind)到菜单(outlets->statusMenu),创建了另一个蓝色对象调用 PreferencesAppController 并将收到的 Actions->showPreferences 绑定(bind)到菜单项。

然后我运行程序,一切顺利:状态栏中出现一个图标,下拉菜单有效,如果我单击“首选项...”,则会出现首选项窗口,但是...它没有聚焦!它位于其他窗口的顶部,但我必须单击才能使其聚焦。核心数据保存功能工作正常,只是我必须使用按钮手动保存,从状态栏菜单退出应用程序不会保存,但这是一个边缘问题。

为什么窗口没有聚焦?

最佳答案

根据您对应用程序的描述,我假设它是“状态栏应用程序”,它应该在后台运行,而不是显示在 Dock 中。

这意味着您的应用程序不是事件应用程序。用户单击您的状态项目并从其菜单中选择一个项目不会改变这一点。

当非事件应用程序打开一个窗口时,该窗口不会获得焦点(因为这通常会窃取用户在该应用程序中所做的任何操作的焦点活跃)。

所以,你需要 activate your application .

关于objective-c - 使用 "showWindow"调用的窗口未聚焦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17077061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com