簡體   English   中英

在 SwiftUI 中顯示和編輯文本的文本字段/視圖是什么?

[英]What textfield / view to show and edit text in SwiftUI?

我想編輯一個項目,例如,我有一個名為“夾克”的項目,然后我想用一個新名稱“灰色夾克”進行編輯

現在我將擁有我的項目列表,當我按下“夾克”項目時,它將 go 到DetailItem並且當它出現時,我希望該文本字段/視圖已經填充了“夾克”文本然后我可以編輯它。 請注意,當項目名稱首次出現時,我想使用真實文本而不是占位符。

有誰知道我應該使用什么元素,或者如果文本字段如何? 因為我在第一次出現時找不到如何設置帶有名稱的文本字段。

更新:

這是我嘗試過的,我從這里獲取的代碼。 它基本上采用了以前的文本並將其作為占位符,而實際上我希望它是可編輯的。

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
    )
}
}

這是一個可能的解決方案:

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
    }
    
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM