首页 > 解决方案 > 当我按回车键或单击文本字段外部时,如何删除文本字段焦点?(SwiftUI,MacOS)

问题描述

当我按回车键或单击文本字段外部时,如何删除文本字段焦点?请注意,这是MacOS上的 SwiftUI 。

如果我这样做:

import SwiftUI

struct ContentView: View {
  @State var field1: String = "This is the Text Field View"

  var body: some View {
    VStack{
      Button("Press") {
        print("Button Pressed")
      }

      TextField("Fill in Text", text: Binding(
        get: { print("get") ; return self.field1 },
        set: { print("set") ; self.field1 = $0 }
        )
      )
    }
  }
}

然后单击 TextField 并对其进行编辑,然后单击按钮 TextField 不会失去焦点。我怎样才能让它退出编辑模式并失去焦点。

如果我按回车键,我也想失去对 TextField 的关注。我将绑定初始化程序与 get 和 set 一起使用,因为我认为我可以以某种方式拦截按键并检测“返回”字符,但这不起作用。

任何帮助表示赞赏:-)

标签: focustextfieldswiftuikeypress

解决方案


以下是可能的变体

import SwiftUI
import AppKit

struct ContentView: View {
  @State var field1: String = "This is the Text Field View"

  var body: some View {
    VStack{
      Button("Press") {
        print("Button Pressed")
          NSApp.keyWindow?.makeFirstResponder(nil)
      }

      TextField("Fill in Text", text: Binding(
        get: { print("get") ; return self.field1 },
        set: { print("set") ; self.field1 = $0 }
        ), onCommit: {
            DispatchQueue.main.async {
                NSApp.keyWindow?.makeFirstResponder(nil)
            }
      }
      )
    }
  }
}

推荐阅读