You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中为含10+项的ListView创建带导航链接的数组

实现带导航跳转的SwiftUI ListView

当然可以实现这个需求!我会帮你调整代码,让每个餐厅条目点击后跳转到对应的详情页面。下面是具体的修改步骤和完整代码:

1. 创建详情视图

首先我们需要一个展示餐厅详情的视图,它接收一个Restaurant对象作为参数:

struct RestaurantDetailView: View {
    var restaurant: Restaurant
    
    var body: some View {
        VStack(spacing: 20) {
            Text("餐厅详情")
                .font(.largeTitle)
                .fontWeight(.bold)
            Text("餐厅名称:\(restaurant.name)")
                .font(.title)
            // 这里可以添加更多详情内容,比如地址、评分、菜品介绍等
            Spacer()
        }
        .padding()
        .navigationTitle(restaurant.name)
    }
}

2. 完善模型与列表视图

接下来我们调整原有的代码,添加导航结构并让列表项支持跳转:

import SwiftUI

struct Restaurant: Identifiable {
    var id = UUID()
    var name: String
    // 如果你需要根据不同餐厅跳转不同类型的视图,可以在这里添加标识(比如枚举)
    // 不过大部分场景下,直接传递餐厅数据给统一的详情视图就足够了
}

struct RestaurantRow: View {
    var restaurant: Restaurant
    
    var body: some View {
        Text("Come and eat at \(restaurant.name)")
            .padding(.vertical, 8)
    }
}

struct Parts: View {
    // 将餐厅数组移到属性中,避免每次视图刷新都重新创建,提升性能
    private let restaurants = [
        Restaurant(name: "1"), Restaurant(name: "2"), Restaurant(name: "3"),
        Restaurant(name: "4"), Restaurant(name: "5"), Restaurant(name: "6"),
        Restaurant(name: "7"), Restaurant(name: "8"), Restaurant(name: "9"),
        Restaurant(name: "10"), Restaurant(name: "11"), Restaurant(name: "12"),
        Restaurant(name: "1"), Restaurant(name: "2"), Restaurant(name: "3"),
        Restaurant(name: "4"), Restaurant(name: "5"), Restaurant(name: "6"),
        Restaurant(name: "7"), Restaurant(name: "8"), Restaurant(name: "9"),
        Restaurant(name: "10"), Restaurant(name: "11"), Restaurant(name: "12")
    ]
    
    var body: some View {
        // iOS 16+ 使用NavigationStack,iOS 15及以下替换为NavigationView
        NavigationStack {
            List(restaurants) { restaurant in
                // 将列表项包装在NavigationLink中,点击后跳转到对应详情页
                NavigationLink(destination: RestaurantDetailView(restaurant: restaurant)) {
                    RestaurantRow(restaurant: restaurant)
                }
            }
            .listStyle(GroupedListStyle())
            .environment(\.horizontalSizeClass, .regular)
            .navigationTitle("餐厅列表") // 添加导航栏标题
        }
    }
}

struct Parts_Previews: PreviewProvider {
    static var previews: some View {
        Parts()
    }
}

关键修改点说明

  • 导航容器:用NavigationStack(iOS16+)或NavigationView(旧版本)包裹整个列表,这是SwiftUI实现页面跳转的核心基础。
  • NavigationLink:把每个RestaurantRow包装在NavigationLink里,指定跳转的目标视图为RestaurantDetailView,并传递对应的restaurant数据,确保详情页能展示对应餐厅的信息。
  • 数据结构优化:把餐厅数组从body移到属性中,避免每次视图刷新都重复创建数组,提升运行效率。

这样修改后,你点击列表里的任意餐厅条目,就能跳转到对应的详情页面啦!

内容的提问来源于stack exchange,提问作者Advocate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 12:43:12