【问题标题】:SwiftUI - Is there any way to build a dynamic list view without NavigationView?SwiftUI - 有没有办法在没有 NavigationView 的情况下构建动态列表视图?
【发布时间】:2019-10-30 06:32:11
【问题描述】:

(添加示例代码)

我正在尝试使用 SwiftUI 来构建一个可选列表,就像 Swift 中的原始 Tableview 一样。

我想在选定项目上的用户选项卡时显示详细视图。但是,我发现实现它的唯一方法是使用 NavigationView 和 NavigationLink。

有谁知道还有其他方法可以通过 SwiftUI 实现可选列表吗?

下面是我实现的示例:

NavigationView{

    List{

        ForEach(items, id: \.id){ item in 

            NavigationLink(destination: WorkItemDetailView(item: item)){

                WorkItemListRow(item: item)
            }
        }
    }
}

WorkItemListRow 是在列表的单元格中呈现对象。 WorkItemDetailView 是详细视图,会显示对象的详细信息。

【问题讨论】:

  • 为什么不能使用 NavigationView 和 NavigationLink?
  • @LuLuGaGa 抱歉没有把我的问题说清楚。我可以使用 NavigationView 和 NavigationLink,但我想知道是否有其他方法可以实现列表视图。
  • 如果您只是不喜欢带有导航栏的布局,也许这会有所帮助:stackoverflow.com/questions/57517803/…
  • @cbjeukendrup 谢谢。虽然这不是我想要的,但它对我仍然有帮助。

标签: ios swift listview swiftui


【解决方案1】:

您也可以使用模态演示:

@State var selectedItem: Item? = nil

var body: some View {
    List {
        ForEach(items) { item in
            WorkItemListRow(item: item)
                .onTapGesture {
                    self.selectedItem = item
                }
        }
    }   .sheet(item: $selectedItem,
               onDismiss: { self.selectedItem = nil }) { item in
                    WorkItemDetailView(item: item)
               }
    }
}

【讨论】:

  • 非常感谢!这真是一个很好的例子!我也会尝试其他方式。
  • 这救了我!!
【解决方案2】:

我认为最好提供源代码,无论如何根据您的问题,您已经建立了一个tableview,但只是想转到另一个包含tableview中所选项目详细信息的页面。

你可以用这个:

  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            let vc = ViewController()
            self.present(vc, animated: true, completion: nil)

}

【讨论】:

  • 这个答案使用 UIKit 而不是 OP 要求的 SwiftUI。
  • @rog 感谢您调整我,我已经提供了示例代码。另外,感谢您提供解决方案,但我正在寻找 SwiftUI 解决方案。
猜你喜欢
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
  • 2015-03-05
  • 2021-08-17
  • 2017-09-20
  • 1970-01-01
  • 2017-07-16
  • 2012-03-29
相关资源
最近更新 更多