当文本编辑器失去焦点时如何收到通知?

Jer*_*emy 2 ios swift swiftui ios14

在我的 SwiftUI 应用程序中,我希望在TextEditor失去焦点/完成编辑时收到通知。理想情况下,类似 的TextField回调onCommit将是完美的。

使用下面的 newonChange确实可以接收用户输入的每个新字符,但我真的想知道它们何时完成。

@State var notes = ""
...

TextEditor(text: $notes)
    .onChange(of: notes, perform: { newString in
        print(newString)
    })
Run Code Online (Sandbox Code Playgroud)

Jer*_*emy 7

我明白了,你可以使用UIResponder.keyboardWillHideNotification.

TextEditor(text: $notes)
    .onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardWillHideNotification)) { _ in
        print("done editing!")
    }
Run Code Online (Sandbox Code Playgroud)

  • 如果您有一个表单并且焦点移动到下一个可编辑字段而不隐藏键盘,则这不起作用。 (8认同)

kga*_*dis 5

在 iOS 15.0 上,现在有@FocusState

struct MyView: View {

  @State var text: String
  @FocusState private var isFocused: Bool

  var body: some View {
    Form {
      TextEditor(text: $text)
        .focused($isFocused)
        .onChange(of: isFocused) { isFocused in
          // do stuff based off focus state change
        }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)