【问题标题】:Popover editable text弹出框可编辑文本
【发布时间】:2012-04-10 08:23:16
【问题描述】:

我开始为我的 Notes-Website 制作 Mac 应用程序。此应用程序基于菜单栏中的弹出窗口。在弹出框内我有一个文本字段,但它虽然已激活但不可编辑。例如,右键单击粘贴是可行的...如何使此弹出框具有交互性?目前按键时只有mac os的错误提示音。

感谢您的帮助!

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。

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

【问题讨论】:

  • 您不需要做任何特别的事情来使其具有交互性。您需要向我们提供更多有关您如何制作弹出框及其视图的信息。
  • 好的,我改了问题,加了代码。
  • 这对我来说似乎是一个错误。看看其他人是否见过这种行为会很有趣。我将您的代码复制到了一个带有弹出框(带有按钮、弹出按钮和文本字段)的测试项目中。弹出框及其所有控件在附加到我的窗口时工作正常,但文本字段显示了您在将弹出框附加到状态栏项目时描述的行为 - 其他控件工作正常。
  • 是的,弹出框内的控件(按钮)工作正常。我只想创建一个菜单栏应用程序,它显示一个列表或一个用于记笔记的文本字段。它应该像popover一样,还有其他实现这一点的可能性吗?哪些元素是例如FaceTab(Facebook 的菜单栏)使用,因为那里的文本字段是可编辑的。

标签: objective-c xcode popover


【解决方案1】:

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

它还对“最前面的应用程序”和“关键窗口”的反应产生重要影响。在您的“statusClicked”方法中,您可能需要添加:

[NSApp activateIgnoringOtherApps:YES];

让您的应用真正被激活。

(当然,如果您不编写 LSUIElement/agent 应用程序,我的所有评论都是无关紧要的。)

【讨论】:

  • 是的,LSUIElement 已激活。我停用了它并添加了您的代码,但它仍然无法正常工作:(“代理”是一个不同的选项还是激活/停用的东西(因为您说的是 LSUIElement/agent 应用程序)?但是感谢您的回答!
  • 不,LSUIElement 标志使它成为“代理应用程序”。虽然,Apple 并没有非常一致地使用这些术语。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
相关资源
最近更新 更多