swiftUI — проблема перехода от представления «Список» к представлению «Подробности» с использованием основных данных

возникли проблемы с навигацией. Ссылка на подробное представление. Пробовал два варианта. Вариант 1, NavigationLink открывается для FileDetails, но пустой, без файловых данных:

      struct FileList: View {

    @Environment(\.managedObjectContext) var context
    @FetchRequest(entity: FileEnt.entity(), sortDescriptors: [NSSortDescriptor(key: "fileName", ascending: false)]) var results: FetchedResults<FileEnt>
    @StateObject var fileData = FileViewModel()

    var body: some View {
        NavigationView {
            List {
                ForEach(results) { aFile in
                    NavigationLink(destination: FileDetails(fileData: fileData)) {
                        VStack {
                            Text(aFile.fileName ?? "")
                        }
                    }
                }
            }.navigationBarTitle("Files")
        }
    }
}

Вариант 2, используя onTapGesture. Он работает при нажатии на текст списка или стрелку, но при нажатии на свободное пространство между именем файла и стрелкой он переходит к подробному представлению, какие данные просматривались в последний раз:

      ...
    @State var isSegue = false
    var body: some View {
        NavigationView {
            List {
                ForEach(results) { aFile in
                    NavigationLink(destination: FileDetails(fileData: fileData), isActive: $isSegue, label: {
                        VStack {
                            Text(aFile.fileName ?? "")
                        }
                    })
                    .onTapGesture {
                        fileData.DetailItem(fileItem: aFile)
                        isSegue.toggle()
                    }
                }
            }.navigationBarTitle("Files")
        }
    }
}

Вот упрощенная ViewModel:

      import Foundation
import CoreData
import UIKit

class FileViewModel: ObservableObject {
    @Published var fileName = ""
    
    init(){
        
    }

    func DetailItem(fileItem: FileEnt){
        fileName = fileItem.fileName ?? ""
    }

Я добавлю больше кодов, если это необходимо. Спасибо за совет!

0 ответов

Другие вопросы по тегам