我在 SwiftUI Mac OSX 应用程序中使用导航 View 。我有一个 ListView 来选择人员,然后在 PersonDetail 中显示他们的属性。它运行良好。但是,我将状态发送到 PersonDetail View
中的绑定(bind)。
工作正常,但是每次单击新行时,我想再次将状态 s_selectedView
重置为 0
。
有导航 View 更新的事件吗?我尝试在 PersonDetail View 中使用 onAppear()
事件,但是只调用一次。我看到的唯一选择是将我的状态推向我的 List
,然后在 TableView 的 tapGesture
上更改它。
这是我的导航 View 代码:
NavigationView {
PersonList(selectedPerson: $selectedPerson)
if selectedPerson != nil {
PersonDetail(person: selectedPerson!, s_currentView: self.$s_selectedView)
//Here I would need a event, for appear / update
//.onAppear
//{
//only called once
//}
}
}
这是我在上面同一 View 中的绑定(bind):
@State var s_selectedView : Int = 0
每当在列表中按下新项目时,我想将该变量重置为 0。
TL:DR
是否有类似 onAppear
的等效函数仅用于状态的 update
?问题是我的 View 没有再次出现(onAppear
没有被调用),只是数据由于 @State
事件而发生变化。我怎样才能捕捉到该事件?
最佳答案
您可以尝试类似以下的操作 - 使用代理绑定(bind)到所选人员,一旦所选人员发生更改,就会重置您的状态:
(粗糙 - 未测试)
NavigationView {
PersonList(selectedPerson: Binding<Type_Of_Selected_Person>(get: {
self.selectedPerson
}, set: {
self.selectedPerson = $0
self.s_selectedView = 0
}))
关于SwiftUI 更新导航操作的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60449425/