永远不会调用TextField onCommit

时间:2019-06-18 10:16:22

标签: swift swiftui xcode11 ios13

我已经在SwiftUI上工作了一个星期,作为所有人,我都在努力确定不起作用的原因是我的错误还是误解。

我正在使用TextField视图,但从未执行 onCommit 关闭。 onEditingChanged 工作正常。当文本字段获得焦点时,它将被调用为true;而当文本字段被释放时,它将被调用为false。

onCommit 关闭将永远不会执行。根据代码中提供的少量文档:

  

onCommit :用户执行操作时要执行的操作   (通常是返回键),而TextField则是焦点。

这是代码:

TextField($value,
          placeholder: Text(placeholder),
          onEditingChanged: { edit in
            print("edit = \(edit)")
          },
          onCommit: {
            print("COMITTED!")
          }).textFieldStyle(.roundedBorder).padding(.horizontal, 20)

理想情况下,我想将焦点从接收RETURN键的文本字段移开,然后将焦点放在以下字段上。使用UITextField和resignFirstResponder()并成为firstResponder()很容易。

我已经设法使用UIViewRepresentable来嵌入旧的UITextField,但这不是本文的重点。我真的希望能使它在纯SwiftUI代码中工作。

如果我可以使onCommit正常工作,我应该在那里放置什么以实现自己的目标?

更新:看来问题仅出现在iOS上,而不是macOS,但似乎可以正常工作。

更新2 :这是在计算机上运行建议代码的结果的视频。我确实向Apple提交了错误……我们将会看到。

enter image description here

2 个答案:

答案 0 :(得分:4)

您的代码应该可以很好地工作,就像在Xcode 11.0 beta 1上一样。但是,我可以确认它目前在beta 2上无法正常工作。为此,我向Apple提交了一个错误报告问题。


更新:此问题已通过 Xcode 11 beta 3 修复。

答案 1 :(得分:1)

在真实的模拟器中尝试。

记住一些注意事项:

  • 不幸的是,调试器无法使用实时预览
  • 控制台未连接到实时预览,因此print()的结果未显示
  • 您可以稍微更改代码并构建一个简单的日志控制台,以查看是否要在预览模式下对其进行测试的结果:

赞:

struct ContentView : View {

    @State private var log: String = "Logs: "
    @State var value: String = ""

    var body: some View {
        VStack() {

            // Logger
            Text(log)
                .lineLimit(0)
            .padding()
            //
            Spacer()

        TextField($value,
                  placeholder: Text("placeholder"),
                  onEditingChanged: { edit in
                    self.log.append("\n edit = \(edit)")
        },
                  onCommit: {
                    self.log.append("\n COMITTED!")
        }).textFieldStyle(.roundedBorder).padding(.horizontal, 20)
            Spacer()
        }
    }
}
  • 实时预览存在一个错误,导致其无法在键盘上正常工作,并且具有史诗般的延迟(我的操作大约需要15分钟)才能显示屏幕键盘。因此,如果您确实想在实时预览中查看结果,则应该非常耐心并等待键盘:

enter image description here

  • 使用模拟器或真实设备测试所需内容。视频:Xcode11-Beta1

enter image description here