当 TextEditor 失去焦点时如何得到通知?

Posted

技术标签:

【中文标题】当 TextEditor 失去焦点时如何得到通知?【英文标题】:How to be notified when a TextEditor loses focus? 【发布时间】:2020-08-28 22:33:04 【问题描述】:

在我的 SwiftUI 应用程序中,我希望在 TextEditor 失去焦点/完成编辑时收到通知。理想情况下,像 TextFieldonCommit 回调这样的东西会很完美。

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

@State var notes = ""
...

TextEditor(text: $notes)
    .onChange(of: notes, perform:  newString in
        print(newString)
    )

【问题讨论】:

【参考方案1】:

我想通了,你可以使用UIResponder.keyboardWillHideNotification

TextEditor(text: $notes)
    .onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardWillHideNotification))  _ in
        print("done editing!")
    

【讨论】:

如果您有一个表单并且焦点移动到下一个可编辑字段而不隐藏键盘,这将不起作用。【参考方案2】:

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
        
    
  

【讨论】:

以上是关于当 TextEditor 失去焦点时如何得到通知?的主要内容,如果未能解决你的问题,请参考以下文章

按 T​​ab 时 NSTextField 没有注意到失去焦点?

文本框 失去焦点 是啥意思?

如何在onchange事件后某个文本框得到焦点并传值?

失去焦点事件啥意思

前端开发中失去焦点和获取焦点是啥意思

C++ Builder中如何让窗体一直显示最前,焦点不失去,就是点不了别的窗体,切换不了窗体,总处在被激活状态