swift 按下按钮启用编辑后开始在文本域中键入?

sulc1iza  于 2023-01-01  发布在  Swift
关注(0)|答案(1)|浏览(137)

我有一个文本字段用于存储用户的个人资料名称,在文本字段的右边有一个编辑按钮,可以进行编辑,这样用户就不会意外地更改他们的个人资料。
下面是我的代码:

struct ProfilePage: View { 
  @State private var name = "" 
  @State var nameEditEnabled = false 
  @AppStorage("NAME_KEY") var savedName = "" 

  var body: some View { 
    VStack { 
      HStack { 
        TextField("Name", text: $savedName) 
          .textFieldStyle(.roundedBorder) 
          .font(.title) .disableAutocorrection(true) 
          .onChange(of: name) {text in 
             self.savedName = name } 
          .onSubmit { nameEditEnabled = false } 
          .disabled(nameEditEnabled ? false : true) 

          Button(action: {self.nameEditEnabled.toggle()}) {
            Image(systemName: "square.and.pencil") 
          }
      }
    }
  .padding() 
  }
}

我将如何着手使它在按下按钮时,用户自动进入文本域,键盘弹出,以便他们可以开始键入(而不必手动按下文本域)?
当我启用编辑时,它只启用文本字段,但不让用户开始在其中键入(即,调出键盘,以便他们可以编辑文本字段)。
编辑:更新了建议代码。
GIF of what my app is doing

soat7uwm

soat7uwm1#

你必须使用focused,见下面的代码:

@State private var name = ""
@State var nameEditEnabled = false

@FocusState var isFocusOn: Bool

VStack {
    HStack {
        TextField("Name", text: $name)
            .focused($isFocusOn)
            .textFieldStyle(.roundedBorder)
            .font(.title) .disableAutocorrection(true)
            .onSubmit { nameEditEnabled = false }

        Button(action: {
            isFocusOn = true
        }) {
            Image(systemName: "square.and.pencil")
        }
    }
}
.padding()

相关问题