SwiftUI Button действие вызывается при нажатии NavigationLink, и основной вид не обновляется

У меня есть представление SwiftUI, которое выглядит так (упрощено по соображениям конфиденциальности):

var body: some View {

    HStack {

        Button(action: {

            self.completed.toggle()

        }) {

            Text(self.title)

        }

        NavigationLink(destination: DetailView(task: self.task)) {

            Text(self.title)

        }

    }

}

Навигация работает просто отлично, а DetailView имеет обновленный статус (toggle просто переключает статус), однако, когда я возвращаюсь к основному виду, статус не обновляется. Почему это?

И мне нужно, чтобы кнопка действовала иначе, чем текст - это возможно? Я хочу, чтобы нажатие кнопки выполняло действие кнопки, а остальная часть строки действовала как NavigationLink, Как я могу это сделать?

self.completed это CompletionStatus класс, который является ObservableObjectс @Published свойство status, task является @State типа Task, который содержит completed (CompletionStatus) свойство. Пожалуйста, дайте мне знать, если я могу предоставить дополнительную информацию.

Вот Task а также CompletionStatus структуры и классы соответственно:

struct Task: Identifiable {
    let id: UUID()
    var title: String
    var description: String
    @ObservedObject var completed: CompletionStatus
}

class CompletionStatus: ObservableObject {
    @Published var status: Bool

    init(_ defaultValue: Bool) {

        self.status = defaultValue

    }

    func toggle() -> CompletionStatus {

        self.status = !self.status
        return self

    }
}

0 ответов

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