我有一个看起来像这样的 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
}
}