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