У меня есть приложение SwiftUI с базовой c структурой списка / детализации. Новый элемент создается из модального листа. Когда я создаю новый элемент и сохраняю его, я хочу, чтобы был выбран этот элемент списка. Таким образом, если ни один элемент не выбран перед добавлением, ни один элемент не выбирается после добавления. Если элемент выбран перед добавлением, тот же элемент выбирается после добавления.
Я включу код для ContentView, но это действительно самый простой пример List / Detail.
struct ContentView: View {
@ObservedObject var resortStore = ResortStore()
@State private var addNewResort = false
@State private var coverDeletedDetail = false
@Environment(\.presentationMode) var presentationMode
var body: some View {
List {
ForEach(resortStore.resorts) { resort in
NavigationLink(destination: ResortView(resort: resort)) {
HStack(spacing: 20) {
Image("FlatheadLake1")
//bunch of modifiers
VStack(alignment: .leading, spacing: 10) {
//the cell contents
}
}
}
}
.onDelete { indexSet in
self.removeItems(at: [indexSet.first!])
self.coverDeletedDetail.toggle()
}
if UIDevice.current.userInterfaceIdiom == .pad {
NavigationLink(destination: WelcomeView(), isActive: self.$coverDeletedDetail) {
Text("")
}
}
}//list
.onAppear(perform: self.selectARow)
.navigationBarTitle("Resorts")
.navigationBarItems(leading:
//buttons
}//body
func removeItems(at offsets: IndexSet) {
resortStore.resorts.remove(atOffsets: offsets)
}
func selectARow() {
//nothing that I have tried works here
print("selectARow")
}
}//struct
И снова - модальность добавляемого элемента чрезвычайно важна c:
struct AddNewResort: View {
//bunch of properties
var body: some View {
VStack {
Text("Add a Resort")
VStack {
TextField("Enter a name", text: $resortName)
//the rest of the fields
}
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding(EdgeInsets(top: 20, leading: 30, bottom: 20, trailing: 30))
Button(action: {
let newResort = Resort(id: UUID(), name: self.resortName, country: self.resortCountry, description: self.resortDescription, imageCredit: "Credit", price: Int(self.resortPriceString) ?? 0, size: Int(self.resortSizeString) ?? 0, snowDepth: 20, elevation: 3000, runs: 40, facilities: ["bar", "garage"])
self.resortStore.resorts.append(newResort)
self.presentationMode.wrappedValue.dismiss()
}) {
Text("Save Trip")
}
.padding(.trailing, 20)
}
}
}
Чтобы показать проблему - Список с выбором:
Список после создания нового элемента с указанием предыдущего выбора:
Будем благодарны за любые указания. Xcode 11,4