0

Same question here: How to stop showing Detail view when item in Master view deleted?.

Now I am developing a macOS app, which there's a List and a Detail view, also there's a selection binding the list row, which use to delete the row. But when I delete the row, the detail view didn't disappears.

Also there's an ADD button, when user click it, a new row will append to the last positon. But the selection always stay on the last postion, so I want to change to the new created one.

Here's the code:

struct DetailView: View {
    var item: String
    var body: some View {
        Text("Detail of \(item)")
    }
}

struct ContentView: View {
    @State private var items = ["Item 1", "Item 2", "Item 3"]
    @State private var selection: String?
    var body: some View {
        NavigationView {
            VStack {
                List {
                   ForEach(items, id: \.self, selection: $selection) { item in
                       NavigationLink(destination: DetailView(item: item)) {
                           Text(item)
                       }
                   }
                   .onDelete(perform: delete)
               }
               Button {
                   let newCreatedItem = add()
                   selection = newCreatedItem // not work!
                } label: {
                    Image(systemName: "add")
                }
               Button {
                   if let item = selection {
                       delete(item: item) // some other function
                   }
                } label: {
                    Image(systemName: "minus.rectangle.fill")
                }
                .disabled(selection == nil)
            }
            Text("Please select an item.")
        }
    }

    func delete(at offsets: IndexSet) {
        items.remove(atOffsets: offsets)
    }
}

I tried to set selection = nil on deletion, but it doesn't work.

Also I want to set selection = newCreatedItem, it doesn't work.

FaiChou
  • 767
  • 7
  • 16
  • Same issue fixed here: https://stackoverflow.com/questions/74365665/force-deselection-of-row-in-swiftui-list-view/74368833#74368833 – Guillermo Jiménez Nov 26 '22 at 16:35
  • @GuillermoJiménez thanks, the deselection problem solved after appending a refreshID to the List view, but now I have a new problem, how to set selection to another row? – FaiChou Nov 27 '22 at 00:17

0 Answers0