1
  • 我的代码:我使用onCommit闭包能够在焦点集中时通过按Enter 键TextField来执行操作。
import SwiftUI

struct ContentView: View {
  @State private var text = ""

  var body: some View {
    TabView {
      TextField(
        "",
        text: $text,
        onCommit: { print("onCommit") } // I have a problem here
      )
        .tabItem {
          Text("Tab 1")
        }

      Text("Tab 2")
        .tabItem {
          Text("Tab 2")
        }

      Text("Tab 3")
        .tabItem {
          Text("Tab 3")
        }
    }
  }
}
  • 我的问题:onCommit我切换到另一个选项卡时,也总是触发关闭,使我的应用程序执行意外操作。
  • 我的问题:
    1. 这是错误还是功能
    2. onCommit每次我切换到另一个选项卡时,有没有办法避免触发?
4

2 回答 2

1

已弃用

改为使用init(_:text:prompt:)。为行为和行为添加onSubmit(of:_:)视图修饰符。onCommitonFocus(_:)onEditingChanged

import SwiftUI

struct ContentView: View {
  @State private var text = ""

  var body: some View {
    TabView {
      TextField("", text: $text)
        .onSubmit {               // new api
          print("onCommit")
        }
        .tabItem {
          Text("Tab 1")
        }

      Text("Tab 2")
        .tabItem {
          Text("Tab 2")
        }

      Text("Tab 3")
        .tabItem {
          Text("Tab 3")
        }
    }
  }
}
  • onSubmit每次我切换到另一个选项卡时都不会触发。
于 2021-06-19T13:01:05.553 回答
0

提交

当文本字段具有焦点时用户执行操作(例如,当用户按下 Return 键时)执行的操作。https://developer.apple.com

这是设计使然。当您更改选项卡时,TextField失去焦点。因此,调用了 onCommit

当用户按下Return键时,也会调用onCommit 。

于 2021-06-19T11:01:56.443 回答