2012-03-26 74 views
1

我开始为我的Notes网站制作Mac应用程序。此应用程序基于菜单栏中的弹出窗口。弹出框内有一个文本框,但它不可编辑,虽然它已被激活。粘贴右键单击例如作品...我怎样才能使这个popover互动?目前只有当我按下某个键时,mac os的错误声音才会播放。Popover可编辑文本

感谢您的帮助!

Code: 
- (void)awakeFromNib 
{ 
    active = false; 
    statusItem = [[NSStatusBar systemStatusBar] 
        statusItemWithLength:NSVariableStatusItemLength]; 
    [statusItem setHighlightMode:YES]; 
    [statusItem setTitle:[NSString 
          stringWithString:@"test"]]; 
    [statusItem setEnabled:YES]; 
    [statusItem setToolTip:@"test"]; 

    [statusItem setAction:@selector(StatusClicked:)]; 
    [statusItem setTarget:self]; 
} 
- (void)StatusClicked:(id)sender { 
    if(!active) { 
     [[self popover] showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMaxYEdge]; 
     active = true; 
    } 
    else { 
     [popover close]; 
     active = false; 
    } 
} 

该视图包含一个简单的多行文本NSTextField。

如果popover无法实现,那么还有其他可能性吗?哪些元素是例如FaceTab(Facebook的菜单栏)使用,因为文本字段是可编辑的。

+0

不应该有什么特别的东西,你必须做,使之互动。您需要向我们提供更多关于您如何制作popover和其视图的信息。 – rdelmar 2012-03-26 20:45:39

+0

好的,我改变了问题并添加了代码。 – Dion 2012-03-26 20:48:44

+0

这对我来说似乎是一个错误。看看其他人是否看到过这种行为会很有趣。我将你的代码复制到一个测试项目中,使用popover(带按钮,弹出按钮和文本框)。弹出窗口及其所有控件在连接到我的窗口时都能正常工作,但文本字段显示了弹出窗口连接到状态栏项目时所描述的行为 - 其他控件正常工作。 – rdelmar 2012-03-26 22:02:14

回答

0

看起来你正在制作一个“代理”应用程序,除了StatusItem以外没有其他UI。您可能已经在Info.plist中设置了LSUIElement标志。 (基本上,它允许创建一个没有菜单栏的应用程序)。

它对于“最前面的应用程序”和“关键窗口”如何反应也有重要的后果。在您的“statusClicked”方法中,您可能需要添加:

[NSApp activateIgnoringOtherApps:YES]; 

这样才能真正激活您的应用程序。

(当然,如果你不写一个LSUIElement /代理申请我所有的评论是不相关的。)

+0

是的,LSUIElement被激活。我停用它并添加了你的代码,但它仍然没有工作:(是“代理”一个不同的选项或某些激活/停用(因为你说LSUIElement /代理应用程序)?但是,感谢您的答案,但! – Dion 2012-04-06 20:12:00

+0

不, LSUIElement标志使其成为“代理应用程序”。尽管Apple不一致地使用这些术语。 – 2012-04-09 12:14:07