以下简单的 macOS 应用程序是用 SwiftUI 2.0 编写的。
import SwiftUI
@main
struct TempApp: App {
var body: some Scene {
WindowGroup { ContentView() }
}
}
struct ContentView: View {
var body: some View {
Text("Hello, beep!").padding()
}
}
在前台时,此应用程序将在某些击键(如“a”)时发出错误蜂鸣声。抑制这种蜂鸣声的最简单方法是什么?
可以在 here 找到说明此问题(以及答案)的 Xcode 项目。
您可以通过在顶层添加
.keyDown
事件的本地监视器来抑制蜂鸣声。这可以简单地在 ContentView.init()
中完成,如下所示:
struct ContentView: View {
var body: some View {
Text("Hello, silence!").padding()
}
init() {
NSEvent.addLocalMonitorForEvents(matching: .keyDown) { _ in return nil }
}
}
这项技术的灵感来自于这个答案。
添加了 macOS 14.0 和 iOS 17.0
onKeyPress(keys:phases:action:)
。
例如,您可以处理按下的向上箭头:
SwiftUIView()
.onKeyPress(
keys: [.upArrow],
phases: [.down]) { _ in
print("key press")
return .handled
}
如果您返回
.ignored
(这是您尚未处理的按键的默认值),您将听到蜂鸣声。