在您的 Scene
中声明 KeyboardWindowGroup
import SwiftUI
import VisionKeyboardKit
@main
struct YourApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
KeyboardWindowGroup()
}
}
使用 OpenWindowAction
/DismissWindowAction
打开/关闭键盘窗口,并通过 KeyboardEvent.publisher(for:)
接收事件
import SwiftUI
import VisionKeyboardKit
struct ContentView: View {
@Environment(\.openWindow) private var openWindow
@Environment(\.dismissWindow) private var dismissWindow
@State private var isKeyboardShown: Bool = false
var body: some View {
Button {
if !isKeyboardShown {
openWindow(keyboardFor: .global)
} else {
dismissWindow(keyboardFor: .global)
}
} label: {
Text("Toggle Keyboard")
}.onReceive(KeyboardEvent.publisher(for: .global)) { event in
if case .keyboardDidAppear = event {
isKeyboardShown = true
} else if case .keyboardDidDisappear = event {
isKeyboardShown = false
} else {
print("Got event: \(event)")
}
}
}
}
如果您需要多个具有独立事件发布者的键盘,只需传入任何 Hashable
,它将作为键盘的标识符。
返回的 Publisher
可用于 Combine 框架中的链式处理(例如,防抖动)。