【问题标题】:NSTextField in status bar doesn't want to receive focus状态栏中的 NSTextField 不想获得焦点
【发布时间】:2011-08-21 20:59:38
【问题描述】:

出于某种原因,有时我在状态栏菜单中使用的 NSTextField 并不总是允许我输入文本。我单击它并没有任何反应,就好像它被禁用一样。重新启动程序后,它再次工作。我什么也没做,它只是在界面构建器中创建的。

【问题讨论】:

    标签: objective-c cocoa macos user-interface


    【解决方案1】:

    那是因为没有 NSWindow 包含 NSTextField。当窗口获得主窗口时,NSWindow 设置第一响应者。 NSStatusBar 是全局的。它从不集中,因此您的文本字段只会在一开始就集中。

    我不确定是否有办法很好地解决这个问题。您可以尝试手动设置第一响应者。您也可以添加global event monitor

    例子:

    [NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent* incoming) {
      [textfield setStringValue:[incoming characters]];
    }];
    

    注意:这是解决此问题的一种非常糟糕的方法。如果可能的话,我会首先尝试手动将 NSTextField 设置为第一响应者。

    【讨论】:

    • 您可能不想使用setStringValue:,否则您一次只能在字段中输入一个字母!
    • 不,-appendString: 无效,你想要-stringByAppendingString:
    • 它是 [textfield setStringValue:[textfield.stringValue stringByAppendingString:[incoming characters]]];
    猜你喜欢
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多