如何检测何时点击 TextField?(MacOS 上的 SwiftUI)

Ada*_*hus 1 touch textfield gesture swift swiftui

如何检测何时点击 TextField?(MacOS 上的 SwiftUI)

import SwiftUI

struct ContentView: View {
  @State var field: String = "TextField"
  
  var body: some View {
    TextField("Fill in Text", text: $field)
      .onTapGesture {
        print("Textfield pressed")
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当 TextField 被点击时,它不会打印“Textfield press”。我猜这是因为在 TextField 手势检测到点击之前,TextField 已经拾取了它。

Moj*_*ini 7

代替 Taping,您可以TextField轻松检测何时在内部聚焦onEditingChanged

TextField("Fill in Text", text: $field, onEditingChanged: { focused in
    print(focused ? "focused" : "unfocused")
}
Run Code Online (Sandbox Code Playgroud)

  • 这是错误的,使用这种方法您会检测到“onEditingChanged”,而不会检测到其他内容。如果您只点击文本字段,则不会触发。 (2认同)

Asp*_*eri 6

修改.simultaneousGesture器可以满足您的需要。

这是一个例子:

struct TestTextTap: View {
    @State var field: String = "TextField"

    var body: some View {
      TextField("Fill in Text", text: $field)
        .simultaneousGesture(TapGesture().onEnded {
          print("Textfield pressed")
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 感谢阿斯佩里的回复。在我的机器上,它可以在 iOS 模拟器上运行,但不能作为我需要的 macOS 应用程序运行! (4认同)