SwiftUI中的键盘监听器:按键的一对一传递



我想在TextField中截获键盘输入事件,即当用户键入";咖啡";,我希望它能触发6个事件:

  1. C
  2. o
  3. f
  4. f
  5. e
  6. e

SwiftUI中有办法做到这一点吗?

我在TextField上尝试了onChange修饰符,如下所示:

TextField("key", text: $string)
.onChange(of: string) { newValue in
print("(newValue)")
}

但有时只有当我打字很快时,它才会在按下多个键后才会启动,例如,我可能会得到以下更新:

  1. C
  2. Coff💥
  3. Coffe
  4. 咖啡

有没有一种方法可以让键入的键作为一个输入流一次传递一个键?

您可以使用以下方法一次交付一个密钥:

TextField("key", text: $string)
.onReceive(string.publisher.last()) { val in
print("val: (val)")
}

编辑

"。。。。有没有办法登记退格键按下&";,尝试以下简单的扩展:

struct ContentView: View {

@State var string = ""
@State var prevString = ""

var body: some View {
TextField("key", text: $string).border(.red)
.onReceive(string.publisher.last()) { val in
if string.count < prevString.count {
print("backspace pressed, do something clever here")
} else {
print("val: (val)")
}
prevString = string
}
}
}

最新更新