问题标签 [nsstatusbar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swift - 斯威夫特 | macOS | 用 ChangeCount 上的新 NSPasteboard 内容更新 var
我正在尝试在业余时间学习 Swift,并开始了一个小型项目来尝试和有目的地学习。我正在尝试创建一个 MacOS 应用程序,该应用程序在菜单栏上显示剪贴板的前 10 个字符。
我取得了一些成功,我设法让应用程序显示剪贴板内容,但是它只能工作一次;如果剪贴板内容发生变化,它不会更新。
我发现使用ChangeCount我可以跟踪剪贴板,但是我现在陷入了如何构造代码以更新菜单栏的问题。
到目前为止,这是(相关的)代码:
任何帮助将非常感激。
macos - 如何将 isAlternative 与带有 customView 的 NSMenuItem 一起使用?
我正在尝试将 isAlternative 属性与带有自定义视图的 NSMenuItem 一起使用。如果没有自定义视图,它就不会像标准的 NSMenuItem 那样表现。将 NSMenuItems 与自定义视图一起使用时,如何获得标准的修饰键切换行为?
标准菜单项行为
添加一个菜单项。使用 .isAlternate == true 和 .keyEquivalentModifierMask = [ .option ](或其他适当的修饰键)添加一个附加菜单项。
显示菜单时,显示第一个菜单项。按住修改键时,原始菜单项将替换为备用菜单项。
自定义菜单项行为
添加具有自定义视图的菜单项。使用 .isAlternate == true 和 .keyEquivalentModifierMask = [ .option ](或另一个适当的修饰键)添加一个带有自定义视图的附加菜单项。
显示菜单时,始终显示原始菜单项和备用菜单项,而不是标准切换行为。
参考
cocoa - 强制 NSStatusItem 重绘
我创建一个NSStatusItem
并添加一个图像。添加图像后,更改image.template
属性不会立即对图标产生影响。只有单击状态项后,图像才会成为模板。有没有办法强制系统重绘状态项/栏?
我把一个简单的例子放在一起,按下“测试”按钮将图像更改为模板,但是直到选择状态图标后更改才会生效。
swift - 如何在 macOS 菜单栏应用程序中显示多行?
最初我认为添加新行应该可行。问题是,行高太大。我怎样才能使它更密集(彼此靠近)?
在 git开始的第 41 行有以下示例。但苹果文档说 NSStatusItem 内部的自定义视图已被弃用。(不确定它是否在 NSMenuItem 内部的视图中被弃用)
UPD
到目前为止我得到了什么。它不是以 Y 为中心的。并且statusItem?.button?.frame = CGRect(x: 0.0, y: -2.0, ...
似乎不正确并将前导图标移动到底部。
UPD(使用\n 和baselineoffset 重新启动的方法)
macos - 切换暗模式时 NSAppearance 不更新
我有一个仅在 macOS 状态栏中运行的 macOS 应用程序。我将 Info.plist 中的“Application is agent (UIElement)”属性更改为“YES”:
我有一个计时器,它每 5 秒打印一次外观的名称,如下所示:
问题
当我在系统设置中切换暗/亮模式时,名称实际上并没有改变。它总是打印应用程序启动时设置的外观名称。
有没有办法听系统外观变化?
目标
我的最终目标实际上是将 an 绘制NSAttributedString
到 an 上NSImage
,并将其NSImage
用作NSStatusItem
按钮的图像。
对于我使用的属性字符串中的文本UIColor.labelColor
,它应该基于系统外观。但是,它似乎不尊重系统外观的变化。
当我在深色模式下启动应用程序然后切换到浅色模式时:
当我在 Light Mode 下启动应用程序然后切换到 Dark Mode 时:
边注
我将 theNSAttributedString
变成 anNSImage
并且不NSAttributedString
直接在NSStatusItem
按钮上使用的attributedTitle
原因是因为它在状态栏中的位置不正确。
swift - 如何在 SwiftUI 应用程序生命周期中将 statusBar 传递给 popover 中的 contentView?
我正在尝试使用 SwiftUI 2.0(应用程序结构)中引入的 SwiftUI 应用程序生命周期创建一个菜单栏应用程序,其中 SwiftUI 代码中的按钮和操作将更新状态栏项的文本。我正在创建一个状态栏项目,它将触发一个包含 SwiftUI 视图的弹出框。根据我的理解,最好的方法是将 statusBar 传递给 ContentView 的孩子,这将能够使用 statusBar 作为环境对象。但是,我遇到了一个我不明白的问题,即在应用程序委托中运行的代码在 SwiftUI 2.0 初始化函数中失败(原因不明)。我希望我已将下面的所有相关代码包含在一个能够触及问题核心的孤立示例中。
我有一个工作解决方案,使用NSApplicationDelegateAdaptor
在 ContentView 之前初始化 statusBar 的位置,并且 statusBar 只是作为环境对象传递给 ContentView:
这工作得很好。但是,它仍然使用较旧的应用程序委托。我试图在 SwiftUI 2.0 中使用应用程序结构的新 init() 函数,而不是将应用程序启动委托给应用程序(旧)委托。因此,我将上面的代码移到了 init() 函数中:
同样的序列(在应用程序委托中工作)在应用程序结构的初始化中失败,在包含statusBar = NSStatusBar.init()
错误本身显示为Thread 1: hit program assert
,并带有其他错误详细信息:
但是,在设置弹出框的尺寸后放置 StatusBarController 的初始化确实可以在菜单栏中创建状态栏项......但不幸的是,这种方式无法作为 environmentObject 传递给 ContentView。代码如下:
任何人都能够解释发生了什么,为什么会发生这种情况,也许如何解决它?目前,我确实有一个可行的解决方案,我可以通过旧的应用程序委托将 statusBar 作为 environmentObject 传递给 ContentView。但理想情况下,我会使用 SwiftUI 生命周期中 app 结构的较新 init() 函数,因为这似乎是在新结构中执行此操作的方法,同时保留将 statusBar 作为 environmentObject 传递给 ContentView 的能力。
其他相关代码如下。这是状态栏控制器:
内容视图:
空视图:
swift - Swift - 如何在菜单栏中为 NSImage 设置动画(不透明度 0 和 1 之间的脉冲)?
我是 Swift 的新手,我似乎找不到任何资源来实现我想要实现的目标。我发现的大部分内容仅适用于视图。
我有一个statusBarItem
:
其中有一个NSImage
作为图标:
而且我想通过使其脉冲/淡入淡出/动画不透明度来为图标设置动画。
实现这一目标的最佳方法是什么?
谢谢