首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSDatePicker in NSStatusBar NSSMenuItem未接收输入

NSDatePicker in NSStatusBar NSSMenuItem未接收输入
EN

Stack Overflow用户
提问于 2016-10-09 13:52:43
回答 1查看 1K关注 0票数 8

不久前,我编写了一个名为日-O的简单日历菜单栏小部件。日历使用嵌套在NSDatePicker中的股票NSView,在添加到NSStatusItem的NSMenu中的NSMenuItem中。这个应用程序有一个activationPolicy of .accessory (最初是通过plist的"Application“bool设置的)。在某种程度上(也许是通过更新?)日历停止响应输入。当应用程序第一次启动时,您可以单击状态栏项来展开菜单并与日历进行交互,并按预期的方式响应用户的输入。但是,一旦应用程序失去初始焦点,日历就会停止响应输入。

我想我已经追踪到了这个应用程序,在最初退出active之后还没有激活。问题是,如果我尝试在单击菜单栏项目(使用NSApp.activate(ignoringOtherApps:true))时手动激活应用程序,那么菜单(您刚刚打开)就会被取消。

我还试着告诉窗口让NSDatePicker成为第一个响应者,但这似乎也没有任何效果。

当状态栏应用程序不是活动应用程序时,如何在菜单项中获得NSDatePicker以接受用户输入?

编辑:最简单的代码来说明这个问题(将它添加到一个新的macOS Cocoa应用程序中的AppDelegate中):

代码语言:javascript
复制
let statusItem = NSStatusBar.system().statusItem(withLength:NSVariableStatusItemLength)
func applicationDidFinishLaunching(_ aNotification: Notification) {
    NSApp.setActivationPolicy(.accessory)

    statusItem.button?.title = "Calendar"

    let menu = NSMenu()
    let item = NSMenuItem()
    let picker = NSDatePicker(frame: NSRect(x: 0, y: 0, width: 140, height: 148))
    picker.datePickerStyle = .clockAndCalendarDatePickerStyle

    item.view = picker
    menu.addItem(item)

    statusItem.menu = menu
}

启动应用程序,单击菜单项,然后单击日历周围。然后单击另一个应用程序,然后再次单击菜单项。日历不再响应单击。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-10 13:41:37

您的NSDatePicker需要将"acceptsFirstMouse“返回为true,这是只读的,因此您将在子类中这样做。

在运行您提供的代码的测试项目中工作。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39944383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档