繁体   English   中英

NSStatusBar NSSMenuItem中的NSDatePicker没有收到输入

[英]NSDatePicker in NSStatusBar NSSMenuItem not receiving input

不久前,我写了一个简单的日历菜单栏小部件Day-O 日历使用嵌套在添加到NSStatusItem的NSMenu中NSMenuItem的NSView内的NSView内的股票NSDatePicker。 该应用程序具有.accessory (最初通过plist的“应用程序是代理” bool设置)。 在某个时刻(也许是El Capitan的更新?),日历停止响应输入。 当应用程序首次启动时,您可以单击状态栏项以展开菜单并与日历进行交互,它会按预期响应用户输入。 但是一旦应用程序失去了最初的焦点,日历就会停止响应输入。

我认为我已将问题归结为最初退出活动后未激活的应用程序。 问题是,如果在单击菜单栏项时尝试使用手动激活应用程序(使用NSApp.activate(ignoringOtherApps:true) ),则会关闭您刚刚打开的菜单。

我也尝试过告诉窗口使NSDatePicker成为第一响应者,但这似乎也没有任何效果。

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


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

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
}

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

您的NSDatePicker需要返回“ acceptsFirstMouse”为true,这是只读的,因此您将在子类中执行此操作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM