NavigationLink — ano ito, pindutan ng paglipat sa SwiftUI

May-akda: IT Sectr Nai-publish: 2026-06-25 Oras ng pagbabasa: 6 min

Ang NavigationLink ay isang elemento ng kontrol sa SwiftUI na idinisenyo para lumipat sa ibang screen sa NavigationStack o NavigationView. Ayon sa Apple Developer Documentation, 2024, ang NavigationLink ay lumilikha ng isang pindutan na, kapag pinindot, naglalagay ng target na View sa navigation stack. Sa iOS 16+ inirerekomenda na gamitin ang NavigationLink na may value at NavigationDestination, hindi direktang may destination, upang maiwasan ang maagang inisyalisasyon ng mga target na View.

Mga Pangunahing Punto

  • NavigationLink — pindutan ng paglipat sa ibang screen sa SwiftUI
  • Dalawang form — na may destination:label: at may value:label:
  • Value form inirerekomenda sa iOS 16+ (NavigationStack)
  • Destination form nagdudulot ng maagang inisyalisasyon ng View
  • Awtomatikong arrow ng pagbubunyag sa mga listahan ng List

NavigationLink ay isang View na kapag pinindot ay nagpapasimula ng isang navigation transition. Sa loob ng NavigationStack, ang pagpindot sa NavigationLink ay naglalagay ng target na screen sa stack at nagpapakita ng system button na “Bumalik”. Ang NavigationLink ay umiiral mula noong iOS 13 at ito ang pangunahing paraan ng pag-navigate ng gumagamit sa SwiftUI.

Ang NavigationLink ay hindi nagmamana mula sa UIButton — ito ay isang SwiftUI View na awtomatikong umaangkop sa konteksto. Sa loob ng List, ang NavigationLink ay ipinapakita na may disclosure indicator. Sa labas ng listahan, ang NavigationLink ay kumikilos tulad ng isang ordinaryong pindutan, ngunit may gawi sa pag-navigate.

Ayon sa SwiftUI Lab (2024), ang NavigationLink ay isa sa mga pinaka-ginagamit na View sa mga SwiftUI application, na nalalampasan lamang ng Text, Image at VStack. Ang pag-unawa sa mga pagkakaiba sa pagitan ng mga form ng inisyalisasyon ay kritikal para sa pagganap at inaasahang gawi ng pag-navigate.

Paano gumagana ang NavigationLink sa ilalim ng hood

Kapag pinindot, ang NavigationLink ay nagdaragdag ng isang halaga (o destination) sa navigation stack na nauugnay sa pinakamalapit na NavigationStack o NavigationView. Gumagamit ang SwiftUI ng EnvironmentValue upang ipadala ang landas ng pag-navigate sa pamamagitan ng hierarchy ng View. Binabasa ng NavigationLink ang landas na ito mula sa Environment at binabago ito kapag pinindot.

NavigationLink ay may dalawang pangunahing form: na may destination (direktang pagtukoy ng target na View) at may value (halaga para sa NavigationDestination). Ang pagpili ng form ay depende sa bersyon ng iOS at arkitektura ng pag-navigate.

FormInisyalisadoriOS 13–15iOS 16+
DestinationNavigationLink(destination:label:)InirerekomendaHindi inirerekomenda
ValueNavigationLink(value:label:)Hindi availableInirerekomenda
IsActiveNavigationLink(isActive:destination:label:)Programatikong pag-navigateHindi inirerekomenda

Destination form (iOS 13+): NavigationLink(destination: DetailView(), label: { Text(“Open”) }). Ang form na ito ay lumilikha ng DetailView kaagad kapag nag-render ng NavigationLink, kahit na hindi pa pinindot ng gumagamit ang link. Ito ay nagdudulot ng maagang inisyalisasyon ng View at potensyal na problema sa pagganap kung ang target na View ay nagsasagawa ng mabibigat na operasyon sa inisyalisador.

Value form (iOS 16+): NavigationLink(value: “detail_42”, label: { Text(“Open”) }). Ang target na View ay nilikha lamang kapag pinindot ang link, kapag natagpuan ng SwiftUI ang kaukulang .navigationDestination. Pinipigilan nito ang maagang inisyalisasyon at ginagawang mas inaasahan ang pag-navigate.

NavigationLink na may NavigationStack sa iOS 16+ ay nangangailangan ng paglipat sa value form. Tinutukoy mo ang uri ng data para sa pag-navigate (String, Int, enum Route) at nagrerehistro ng destination sa pamamagitan ng .navigationDestination. Ang NavigationLink ay naglalagay lamang ng halaga sa stack, at ang SwiftUI ay lumilikha ng target na View kapag pinindot.

swift
struct CatalogView: View {
    let categories: [String]

    var body: some View {
        List(categories, id: \.self) { category in
            NavigationLink(value: category) {
                Text(category)
            }
        }
        .navigationDestination(for: String.self) { category in
            CategoryView(name: category)
        }
    }
}

// Programatikong pag-navigate:
struct DeepLinkView: View {
    @State private var path: [AppRoute] = []

    var body: some View {
        NavigationStack(path: $path) {
            HomeView()
                .navigationDestination(for: AppRoute.self) { route in
                    switch route {
                    case .detail(let id): DetailView(id: id)
                    case .settings: SettingsView()
                    }
                }
                .toolbar {
                    Button("Buksan ang Mga Setting") {
                        path.append(AppRoute.settings)
                    }
                }
        }
    }
}

Programatikong pag-navigate: ang pagdaragdag ng halaga sa path (sa pamamagitan ng path.append) ay katumbas ng pagpindot sa NavigationLink na may parehong halaga. Ito ay nagbibigay-daan sa pagpapatupad ng pag-navigate mula sa ViewModel, Coordinator, o bilang tugon sa mga push notification.

IsActive form (NavigationLink(isActive:destination:label:)) ay available para sa compatibility, ngunit hindi inirerekomenda sa iOS 16+. Gamitin ang value form na may Binding sa array ng landas o NavigationPath.

NavigationLink sa List ay awtomatikong nagpapakita ng chevron arrow sa kanang bahagi ng row, na nagpapahiwatig sa gumagamit na ang pagpindot ay magdadala sa ibang screen. Ang List ay awtomatikong namamahala ng pagpapakita ng arrow — hindi tulad ng ordinaryong NavigationLink sa labas ng listahan, kung saan walang arrow.

Mula noong iOS 16, ang List na may NavigationLink ay awtomatikong gumagamit ng value form sa loob ng List(data:rowContent:). Kapag gumagamit ng ForEach sa loob ng List, ang arrow ng pagbubunyag ay awtomatikong idinaragdag din. Ang gawi na ito ay hindi maaaring i-off sa pamamagitan ng mga modifier — tanging ang pagpapalit ng NavigationLink ng Button ang makakapag-alis ng arrow.

Problema sa destination form sa List: kung gumagamit ka ng NavigationLink(destination:label:) sa loob ng List, lahat ng target na View ay nililikha kaagad kapag nag-load ang listahan, hindi alintana kung pinindot ng gumagamit ang link o hindi. Para sa mga listahan na may maraming row, ito ay maaaring makapagpabagal nang malaki sa paunang pag-load at makapagpataas ng konsumo ng memorya. Ang value form na may NavigationStack ay lumulutas sa problemang ito.

Ayon sa WWDC 2022 (Session 10054), inirerekomenda ng Apple ang paggamit ng NavigationStack at ang value form ng NavigationLink para sa mga bagong proyekto. Ito ay lalong mahalaga para sa List na may dinamikong data, kung saan ang bilang ng mga row ay maaaring malaki.

Pattern 1: custom na hitsura ng NavigationLink. Ang NavigationLink ay tumatanggap ng anumang View bilang label, na nagpapahintulot sa paglikha ng anumang disenyo para sa link. Sa loob ng List, ito ay lalong maginhawa — nakakakuha ka ng arrow ng pagbubunyag awtomatiko kapag gumagamit ng NavigationLink.

swift
NavigationLink(value: ProductRoute.detail(product)) {
    HStack {
        AsyncImage(url: product.imageURL)
            .frame(width: 60, height: 60)
        VStack(alignment: .leading) {
            Text(product.name).font(.headline)
            Text(product.price) .foregroundColor(.secondary)
        }
    }
    .padding(8)
}

Pattern 2: NavigationLink na walang arrow (custom na pindutan). Kung hindi mo kailangan ang arrow ng pagbubunyag, gamitin ang Button para sa programatikong pag-navigate: path.append(value). Ito ay kapaki-pakinabang para sa custom na mga elemento ng interface kung saan ang NavigationLink ay mukhang hindi natural.

Pattern 3: kondisyonal na pag-navigate. Maaari mong i-block ang NavigationLink sa pamamagitan ng paggamit ng walang laman na destination o hindi pagdaragdag ng .navigationDestination para sa ilang mga halaga. Ang programatikong pag-navigate sa pamamagitan ng path ay nagpapahintulot sa pagsuri ng mga kondisyon bago magdagdag ng halaga.

Ayon sa Hacking with Swift (2024), ang karamihan sa mga problema sa NavigationLink ay nauugnay sa paggamit ng destination form sa mga lumang proyekto. Sa paglipat sa NavigationStack, palitan ang lahat ng NavigationLink(destination:label:) ng NavigationLink(value:label:) at magdagdag ng .navigationDestination sa root level.

Mga Madalas Itanong

Ano ang NavigationLink sa SwiftUI?

NavigationLink ay isang View para sa paglipat sa ibang screen sa SwiftUI. Kapag pinindot, inilalagay nito ang target na screen sa navigation stack ng NavigationStack o NavigationView. Sumusuporta ito ng dalawang form: na may destination (target na View) at may value (halaga para sa routing).

Aling NavigationLink form ang mas mahusay: destination o value?

Value form (iOS 16+) ay mas kanais-nais: ang target na View ay nililikha lamang kapag pinindot, hindi kapag nag-render ang link. Ang Destination form ay lumilikha ng View kaagad, na maaaring magdulot ng mga problema sa pagganap. Para sa mga proyekto na may iOS 16+, gamitin ang value + NavigationDestination.

Bakit gumagawa ang NavigationLink ng arrow sa List?

Ang SwiftUI ay awtomatikong nagdaragdag ng disclosure indicator (arrow) sa NavigationLink sa loob ng List, na nagpapahiwatig ng posibilidad ng paglipat. Ang gawi na ito ay hindi maaaring i-off. Kung hindi kailangan ang arrow, gamitin ang Button na may programatikong pag-navigate sa pamamagitan ng path.append().

Paano gumawa ng programatikong paglipat sa pamamagitan ng NavigationLink?

Gamitin ang NavigationStack na may Binding landas at magdagdag ng mga halaga sa pamamagitan ng path.append(value). Ito ay katumbas ng pagpindot sa NavigationLink na may parehong halaga. Ang programatikong pag-navigate ay nagbibigay-daan sa pagpapatupad ng Deeplink, mga push notification, at Coordinator pattern.

Nakakaapekto ba ang NavigationLink sa pagganap?

Ang Destination form ay maaaring makaapekto kung ang target na View ay nagsasagawa ng mabibigat na operasyon sa inisyalisador — lahat ng destination ay nililikha kapag nag-render ang listahan. Ang Value form na may NavigationStack ay lumulutas sa problemang ito sa pamamagitan ng paglikha ng View lamang kapag pinindot. Para sa mga listahan na may 50+ row, ang pagkakaiba ay makabuluhan.

Buod

  • NavigationLink — pindutan para sa navigation transitions sa pagitan ng SwiftUI screens
  • Value form inirerekomenda sa iOS 16+ na may NavigationStack
  • Destination form lumilikha ng View nang maaga — iwasan para sa malalaking listahan
  • Disclosure indicator — awtomatikong arrow sa List (hindi maaaring i-off)
  • Programatikong pag-navigate sa pamamagitan ng path.append() para sa Deeplink at Coordinator
  • NavigationDestination nagrerehistro ng target na screens ayon sa mga uri ng data
  • IsActive form — luma na, gamitin ang value form sa iOS 16+

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din