SwiftUI 更新导航操作的状态

标签 swift xcode macos list swiftui

我在 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/

相关文章:

swift - 如何以编程方式在 NSDocument macOS 应用程序中打开文档?

objective-c - 从 Safari 显示 : Do you want to allow this page to open "(null)"? 启动的应用程序

ios - 我想从一个字符串数组创建一个字符串数组的多维数组

swift - 多折线图,不想绘制 0 值。 swift 2

ios - UIPanGestureRecogniser 无法正常工作

iphone - iOS 应用程序在线程 0 中崩溃

xcode - NSTableView reloadData方法导致所有行中的NSProgressIndicator更新和闪烁

ios - 如何使 Http 请求在 TableView 单元格之前按时加载

ios - 在 xcode 中构建我的应用程序时出错。显示未找到体系结构 x86_64 的符号

macos - 如何以编程方式重新路由来自特定进程的所有 TCP/IP 或 HTTP 连接