如何在 SwiftUI 中使用按键信息?我尝试使用@EnvironmentObject 与我的 SwiftUI 共享密钥,但我每次在 sendKeybKey 中崩溃:线程 1:致命错误:未找到 UserData 类型的 ObservableObject。UserData 的 View.environmentObject(_:) 作为该视图的祖先可能会丢失。在 .environmentObject 中已在 SceneDelegate 中使用,但这是错误的吗?我的代码:
class KeyTestController<Content>: UIHostingController<Content> where Content: View {
@EnvironmentObject var userData: UserData
override func becomeFirstResponder() -> Bool {
true
}
override var keyCommands: [UIKeyCommand]? {
var keys = [UIKeyCommand]()
for num in "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!\r" {
keys.append(
UIKeyCommand(
input:String(num),
modifierFlags: [],
action:
#selector(sendKeybKey)
)
)
}
return keys
}
@objc func sendKeybKey(_ sender: UIKeyCommand) {
userData.collectChar = sender.input ?? ""
print(">>> test was pressed \(sender.input ?? "")")
}
}
在场景委托中
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
window.rootViewController = KeyTestController/*UIHostingController*/(
rootView: myList()
.environmentObject(UserData())
)
self.window = window
window.makeKeyAndVisible()
}
和用户数据:
final class UserData: ObservableObject {
@Published var datasetUIIdata: [DatasetUII] = []
@Published var collectChar : String = ""
@Published var collectText : String = ""
}
我的 SwiftUI 视图
struct myList: View {
@EnvironmentObject var userData: UserData
var body: some View {
VStack {
HStack {
Text("Key\(userData.collectChar)").font(.largeTitle)
}
.padding()
List {
ForEach(userData.datasetUIIdata, id: \.self) { (item) in
Text(item.userName)
}
.onDelete(perform: delete)
}
.padding()
}
}
func delete(at offsets: IndexSet) {
userData.datasetUIIdata.remove(atOffsets: offsets)
}
}
有人想快速帮助新手吗?
谢谢!
瓦尔德马尔