SwiftUI — tag

SwiftUI 的 .tag(_:) 是什么? #

.tag(_:) 是 SwiftUI 提供的一个修饰符,主要用于标记视图,使其可用于选择或导航。它常用于 PickerTabViewNavigationLink 等控件,与 @State@Binding 变量配合使用。


.tag(_:) 主要使用场景 #

1. 在 Picker 中标记选项 #

Picker 中,.tag(_:) 用于为选项赋予唯一标识,以便 SwiftUI 识别用户选择的是哪个选项。

struct PickerExample: View {
    @State private var selectedFruit = "Apple"

    var body: some View {
        Picker("Select a fruit", selection: $selectedFruit) {
            Text("Apple").tag("Apple")
            Text("Banana").tag("Banana")
            Text("Cherry").tag("Cherry")
        }
        .pickerStyle(.segmented)
    }
}

📌 如何工作?

  • selectedFruit 绑定到 Picker,当用户选择 "Banana"selectedFruit 变为 "Banana"
  • .tag("Apple").tag("Banana").tag("Cherry")Picker 识别选中的选项。

2. 在 TabView 中标记选项卡 #

TabView 里,.tag(_:) 用于标记不同的 Tab,使 @State 变量可以追踪当前选中的 Tab。

struct TabViewExample: View {
    @State private var selectedTab = 0

    var body: some View {
        TabView(selection: $selectedTab) {
            Text("Home Screen")
                .tabItem { Label("Home", systemImage: "house") }
                .tag(0)

            Text("Profile Screen")
                .tabItem { Label("Profile", systemImage: "person") }
                .tag(1)
        }
    }
}

📌 如何工作?

  • selectedTab 追踪当前选中的 Tab,默认为 0(Home)。
  • .tag(0) 标记第一个 Tab.tag(1) 标记第二个 Tab,切换时 selectedTab 也会更新。

NavigationLink 结合 NavigationDestination(iOS 16+)时,.tag(_:) 可用于唯一标识不同的导航目标。

struct NavigationExample: View {
    @State private var selectedPage: String? = nil

    var body: some View {
        NavigationStack {
            VStack {
                Button("Go to Detail") {
                    selectedPage = "detail"
                }
                .buttonStyle(.bordered)

                NavigationLink("Detail Page", value: "detail")
                    .tag("detail")
                    .navigationDestination(for: String.self) { value in
                        Text("You're on the \(value) page")
                    }
            }
        }
    }
}

📌 如何工作?

  • selectedPage 追踪当前的导航状态。
  • NavigationLink 绑定 tag("detail"),当 selectedPage = "detail" 时,自动跳转到详情页。

.tag(_:) 总结 #

.tag(_:) 主要用于:

  1. Picker - 绑定 selection,让 SwiftUI 追踪选中的选项。
  2. TabView - 绑定 selection,让 SwiftUI 追踪当前 Tab。
  3. NavigationLink(iOS 16+) - 标记导航目标,配合 navigationDestination(for:) 使用。

📌 核心作用.tag(_:) 赋予视图一个唯一标识,使其可与 @State@Binding 变量交互,从而追踪用户选择的状态

本文共 788 字,创建于 Feb 6, 2025
相关标签: SwiftUI