【问题标题】:What textfield / view to show and edit text in SwiftUI?在 SwiftUI 中显示和编辑文本的文本字段/视图是什么?
【发布时间】:2021-07-11 06:20:35
【问题描述】:

我想编辑一个项目,例如,我有一个名为“夹克”的项目,然后我想用一个新名称“灰色夹克”进行编辑

现在我将获得我的项目列表,当我按下“夹克”项目时,它将转到DetailItem,当它出现时,我希望该文本字段/视图已经填充了“夹克”文本然后我可以编辑它。请注意,当项目名称首次出现时,我想使用真实文本而不是占位符。

有谁知道我应该使用什么元素,或者如果 textfield 如何使用?因为我在第一次出现时找不到如何设置带有名称的文本字段。

更新:

这是我尝试过的,这段代码来自here。它基本上采用了以前的文本并将其作为占位符,而实际上我希望它是可编辑的。

struct CustomTextField: View {
var placeholder: Text
@Binding var text: String
var editingChanged: (Bool)->() = { _ in }
var commit: ()->() = { }

var body: some View {
    ZStack(alignment: .leading) {
        if text.isEmpty { placeholder }
        TextField("", text: $text, onEditingChanged: editingChanged, onCommit: commit)
    }
}
}

struct UsageCustomTxtField: View {
@State var text = ""

var body: some View {
    CustomTextField(
        placeholder: Text("placeholder").foregroundColor(.black),
        text: $text
    )
}
}

【问题讨论】:

  • 请提供一些代码。你试过什么?什么没用?你得到了什么错误? stackoverflow.com/help/minimal-reproducible-example
  • @Simon 看看我到目前为止的代码。它与您提供的代码类似,实际上我希望该代码是可编辑的,而不仅仅是占位符。是否有任何视图/元素可以用来实现我想要的,或者是否有我想要的 API?
  • 您希望代码可编辑?
  • 我的错,我希望那个 TEXT 是可编辑的。所以无论当前名称显示什么,我都希望它是可编辑的,就像你可以删除一些字符或添加一些单词一样,而不是像占位符那样消失。就像你在你知道的情况下编辑项目时一样

标签: ios swift swiftui textfield edit


【解决方案1】:

这是一个可能的解决方案:

import SwiftUI

struct ContentView: View {
    
    @ObservedObject var myItems: ItemViewModel = ItemViewModel()
    @State var myNewName: String = "" // Will set the new name
        
    var body: some View {
        VStack {
            TextField(self.myItems.myList[0].name, // when it appears, I want that textfield / view already filled with "Jacket" text
                      text: self.$myNewName,
                      onCommit: {
                        self.myItems.changeNameOfListItemTo(newName: self.myNewName, index: 0) I would like to edit with a new name "Gray Jacket"
                        self.myNewName = "" //empty the textfield again so name from item itself will be displayed
                      })
        }
    }
    
}

struct Item { // I have an item named "Jacket"
    var name: String
    
    init(name: String) {
        self.name = name
    }
}


class ItemViewModel: ObservableObject {
    
    @Published var myList: Array<Item> = [Item(name: "Jacket")] //your item list
    
    func changeNameOfListItemTo(newName: String, index: Int) { //function to change the name of an item
        self.myList[0].name = newName
    }
    
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    相关资源
    最近更新 更多