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
}
}