【问题标题】:SwiftUI update State on Navigation ActionSwiftUI 更新导航操作的状态
【发布时间】:2020-06-12 10:07:55
【问题描述】:

我在我的 SwiftUI Mac OSX 应用程序中使用导航视图。我有一个列表视图来选择人员,然后在 PersonDetail 中显示他们的属性。它工作正常。但是,我将状态发送到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 事件而发生变化。我怎样才能捕捉到那个事件?

【问题讨论】:

    标签: swift xcode macos list swiftui


    【解决方案1】:

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

    (粗糙 - 未测试)

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

    【讨论】:

    • 再次感谢您的帮助@Asperi 它确实很完美。这是这里的完美答案..
    猜你喜欢
    • 2023-01-18
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    相关资源
    最近更新 更多