当我按Return键或在Textfield外部单击时,如何删除Textfield焦点? (SwiftUI,MacOS)

当我按Return键或在Textfield外部单击时,如何删除Textfield焦点? 请注意,这是 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并对其进行编辑,然后单击Button,TextField不会失去焦点。如何使其退出编辑模式并失去焦点。

如果我按Return键,我也想从TextField中失去焦点。 我将Binding初始化程序与get和set一起使用,因为我认为我可以以某种方式拦截按键并检测“ Return”字符,但这不起作用。

任何帮助表示赞赏:-)

huxinyuhao 回答:当我按Return键或在Textfield外部单击时,如何删除Textfield焦点? (SwiftUI,MacOS)

这里是可能的变体

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)
            }
      }
      )
    }
  }
}
,

只需将onTapGesture添加到您的VStack中并添加以下行:

UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder),to:nil,from:nil,for:nil)

此代码将关闭键盘。

示例:

VStack {
    // ...
}.onTapGesture {
    UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder),for:nil)
}
本文链接:https://www.f2er.com/3053328.html

大家都在问