Неактивные кнопки навигации - PullRequest
1 голос
/ 06 января 2020

Я пытаюсь сделать простое приложение Master-Detail-FileViewer. В последнем представлении FileViewer я хочу иметь кнопку, которая имеет возможность сделать файл избранным (у каждого файла есть строка «id», которая добавляется к объекту Environment). Когда вы поддерживаете их, этот объект отображается в главном представлении для быстрого доступа пользователя, связанного с представлением FileViewer. Однако, когда пользователь нажимает и идет туда, кнопка неактивна - вы не можете нажать на нее, и она становится черной от синего. Если вы хотите удалить их из избранного, вы не можете. Буду очень признателен, если расскажу, что не так и как сделать кнопку активной. Ошибка не отображается, и приложение не создает sh. Это просто не работает. Заранее спасибо!

Файлы являются либо «оценочными», либо «вторичными», оба имеют свойства id и title. Второе изображение - проблемный c один.

Normal condition Problem Master View

import SwiftUI

struct ContentView: View {

@EnvironmentObject var favouriteList: FavouritesList

var body: some View {
    NavigationView {
        List {
            NavigationLink(destination: JudgementsView()) {
                Text("Judgements")
            }
            NavigationLink(destination: SecondaryView()) {
                Text("Secondary acts")
            }
            ScrollView(.horizontal, showsIndicators: false) {
                VStack {
                    if favouriteList.items.isEmpty {
                        Text("Nothing favoured")
                    } else {
                        ForEach(favouriteList.items, id: \.self) { id in
                            VStack {
                                HStack {
                                    ForEach(judgementsTAXraw.filter {
                                        $0.id == id
                                    }) { judgement in
                                        NavigationLink(destination: FileViewer(file: judgement.id)) {
                                            Text(judgement.title).padding()
                                        }

                                    }
                                }
                                HStack {
                                    ForEach(secondaryTAXraw.filter {
                                        $0.id == id
                                    }) { secondary in
                                        NavigationLink(destination: FileViewer(file: secondary.id)) {
                                            Text(secondary.title).padding()
                                        }

                                    }
                                }

                            }


                        }
                    }

                }
            }

        }
    .navigationBarTitle(Text("Test"))
    }

}
}

struct JudgementsView: View {
var body: some View {
    List(judgementsTAXraw, id: \.id) { judgement in
        NavigationLink(destination: FileViewer(file: judgement.id)) {
            Text(judgement.title)
        }

    }
}
}

struct SecondaryView: View {
var body: some View {
    List(secondaryTAXraw, id: \.id) { secondary in
        NavigationLink(destination: FileViewer(file: secondary.id)) {
            Text(secondary.title)
        }

    }
}
}



struct FileViewer: View {
var file: String

@State private var showCopySheet = false

@EnvironmentObject var favouriteList: FavouritesList

var body: some View {
    Text(file)
        .navigationBarTitle(Text(""), displayMode: .inline)
        .navigationBarItems(trailing:
        Button(action: {
            self.showCopySheet = true
        }) {
            Image(systemName: "doc.on.doc").frame(minWidth: 40)
        }.actionSheet(isPresented: $showCopySheet) {
            ActionSheet(title: Text("What do you want to do?"), buttons: [
                .destructive(Text("favText"), action: {
                    if let index = self.favouriteList.items.firstIndex(of: self.file) {
                        self.favouriteList.items.remove(at: index)

                    } else {
                        self.favouriteList.items.append(self.file)
                    }
                }),
                .cancel()
            ])
            }
    )
}
}

А-а-а в отдельном файле находится объект:

import Foundation

class FavouritesList: ObservableObject {
@Published var items = [String]() {
    didSet {
        let encoder = JSONEncoder()

        if let encoded = try? encoder.encode(items) {
            UserDefaults.standard.set(encoded, forKey: "FavouredItems")
        }
    }
}

init() {
    if let items = UserDefaults.standard.data(forKey: "FavouredItems") {
        let decoder = JSONDecoder()

        if let decoded = try? decoder.decode([String].self, from: items) {
            self.items = decoded
            return
        }
    }

    self.items = []
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...