macOS 和 SwiftUI 2:关闭按键蜂鸣声的最简单方法

问题描述 投票:0回答:2

以下简单的 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 项目。


有很多较旧的相关问题,但这些都不是专门关于在 SwiftUI 2.0 中执行此操作的。

macos swiftui keyboard beep
2个回答
2
投票

您可以通过在顶层添加

.keyDown
事件的本地监视器来抑制蜂鸣声。这可以简单地在
ContentView.init()
中完成,如下所示:

struct ContentView: View {
  var body: some View {
    Text("Hello, silence!").padding()
  }

  init() {
    NSEvent.addLocalMonitorForEvents(matching: .keyDown) { _ in return nil }
  }
}

这项技术的灵感来自于这个答案


0
投票

添加了 macOS 14.0 和 iOS 17.0

onKeyPress(keys:phases:action:)

例如,您可以处理按下的向上箭头:

SwiftUIView()
.onKeyPress(
  keys: [.upArrow],
  phases: [.down]) { _ in
    print("key press")
    return .handled
}

如果您返回

.ignored
(这是您尚未处理的按键的默认值),您将听到蜂鸣声。

© www.soinside.com 2019 - 2024. All rights reserved.