swift - 如何在 NSView 子类中绘制两行文本? (macOS 系统托盘)

标签 swift macos cocoa nsview nsstatusbar

我正在尝试在 macOS 系统托盘中写入两行文本,非常类似于 iStat pro 对网络事件所做的操作:

enter image description here

我知道我必须子类化 NSView 才能做到这一点,但我无法让它工作,即使是一行:

class CustomView:NSView {

  override func draw(_ dirtyRect: NSRect) {
        let text: NSString = "my string"

        let textRect: NSRect = NSMakeRect(0, 0, 100, 20)
        text.draw(in: textRect)

  }
}

然后:

let statusBar = NSStatusBar.system
statusItem = statusBar.statusItem(withLength: 100)
let view = CustomView()
view.wantsLayer = true
statusItem.button?.addSubview(view)

我在 stackoverflow 上找到了其他线程:

最佳答案

怀疑这就是您正在寻找的内容,但这会将两行文本放入状态项中:

import Cocoa

let app = NSApplication.shared
let statusItem = NSStatusBar.system.statusItem(withLength:-1)
statusItem.button?.font = NSFont(name:"Menlo Bold", size: 10.0)
statusItem.button!.title = "one\ntwo"
app.run()

它仍然只是一个按钮,我不知道你将如何分离每个项目的选择。也许下拉菜单会更好?

关于swift - 如何在 NSView 子类中绘制两行文本? (macOS 系统托盘),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61557717/

相关文章:

html - 为什么 WebView 的 dataWithPDFInsideRect 不能在 Mavericks 上创建高质量的 PDF?

xcode - 使用 Cocoa 接受参数并运行系统命令

ios - 使用 Swift iOS 使用 RS256 或 RS512 验证 JWT token

ios - 在 tableView 中下载图像(_ :, cellForRowAt :)

swift - 了解 UserDefaults 注册方法

macos - 第 3 方 Mac 开发者应用程序 : DEVELOPER NAME: no identity found

arrays - 如何在 Swift 的 for 循环中向数组中插入元素?

cocoa - NSClipView 在 setDrawsBackground 上出现重影、伪影、痕迹 :NO

macos - 在 Swift 中向 NSWindow 添加多个 subview

objective-c - 使用 AVFoundation 修改音频元数据