ShadowDES
ShadowDES

Reputation: 873

SwiftUI TextField CoreData - Changing an attribute's data

I'm trying to use TextField to change the data of an attribute of CoreData, and everything I've come up with hasn't been successful. There is a similar question (listed below), and I'm going to post the code from the correct answer to that to explain it.

struct ItemDetail: View {
    @EnvironmentObject var itemStore: ItemStore
    let idx: Int


    var body: some View {
        NavigationView {
            Stepper(value: $itemStore.items[idx].inventory) {
                Text("Inventory is \(self.itemStore.items[idx].inventory)")
            }

                // Here I would like to do this
                // TextField("PlaceHolder", $itemStore.items[idx].name)

                // That doesn't work... also tried
                // TextField("PlaceHolder", $name) - where name is a @State String
                // How can you then automaticlly assign the new value of @State name
                // To $itemStore.items[idx].name?


            .padding()
            .navigationBarTitle(itemStore.items[idx].name)
        }
    }
}

Original Question:

SwiftUI @Binding doesn't refresh View

Upvotes: 1

Views: 1382

Answers (1)

ShadowDES
ShadowDES

Reputation: 873

I now have it working.

struct ItemDetail: View {
@EnvironmentObject var itemStore: ItemStore
let idx: Int

// Added new @State variable
@State var name = ""


var body: some View {
    NavigationView {
        Stepper(value: $itemStore.items[idx].inventory) {
            Text("Inventory is \(self.itemStore.items[idx].inventory)")
        }

        TextField("Placeholder", text: $name) {
            // When the enter key is tapped, this runs.
            self.itemStore.items[self.idx].name = self.name
        }

        .padding()
        .navigationBarTitle(itemStore.items[idx].name)
    }
}

}

Upvotes: 1

Related Questions