SwiftUI更新导航操作状态

时间:2020-02-28 10:04:43

标签: swift xcode macos list swiftui

我在SwiftUI Mac OSX应用程序中使用了导航视图。我有一个列表视图来选择“人员”,然后在“人员详细信息”中显示其属性。一切正常。但是,我正在向PersonDetail View中的绑定发送状态。

这很好,但是每次单击新行时,我都想将状态s_selectedView重置为0

是否有一个NavigationView更新事件?我尝试在PersonDetail视图中使用onAppear()事件,但是该事件仅被调用一次。我看到的唯一选择是将状态推向List,然后在“表格视图”的tapGesture上进行更改。

那是我的导航视图代码:

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

    }
  }

这是我在上面同一视图中的绑定:

@State var s_selectedView : Int = 0

每当在列表中按下新项目时,我都希望将该变量重置为0。

TL:DR

是否仅对某州的onAppear具有类似update的功能?问题是我的视图不再出现(onAppear没有被调用),只是数据由于@State事件而改变。我怎么能赶上那个事件?

1 个答案:

答案 0 :(得分:2)

您可以尝试以下操作-使用代理绑定到选定的人,一旦选定的人更改,就会重置您的状态:

(从头开始-未测试)

NavigationView {
    PersonList(selectedPerson: Binding<Type_Of_Selected_Person>(get: {
            self.selectedPerson
        }, set: {
            self.selectedPerson = $0
            self.s_selectedView = 0
        }))