SwiftUI’da, NavigationLink
, NavigationStack
, NavigationPath
ve navigationDestination
; kolay yönetilebilir ve dinamik gezinme yapıları oluşturmanıza imkan tanır. Bu dört yapı, birbirleriyle uyum içinde çalışarak kullanıcıların uygulamanızda gezinti yapmasını sağlar.
Bu kavramların detaylı bir açıklamasının aşağıda bulabilirsiniz.
1. NavigationLink
NavigationLink
, SwiftUI’da kullanıcıların bir görünümden diğerine geçiş yapmasını sağlayan temel bir bileşendir. NavigationLink
‘i iOS 17’den sonra NavigationStack
, öncesinde NavigationView
içinde kullanırız.
Özellikler ve Yöntemler:
NavigationLink(_ titleKey:destination:)
:- Açıklama: Belirli bir başlık anahtarı (
titleKey
) ve hedef view (destination
) ile bir navigation link oluşturur.Kullanım: Bu yöntem, yerelleştirilmiş başlıklar için kullanışlıdır.
NavigationLink(LocalizedStringKey("Title"), destination: MyDestinationView())
- Açıklama: Belirli bir başlık anahtarı (
NavigationLink(_ titleKey:value:)
:- Açıklama: Belirli bir başlık anahtarı (
titleKey
) ve bir değer (value
) ile bir navigation link oluşturur. Bu değer, genellikle birNavigationPath
ile birlikte kullanılır.Kullanım: Bu yöntem, yerelleştirilmiş başlıklar ve belirli bir değeri navigation state’e aktarmak için kullanışlıdır.
NavigationLink(LocalizedStringKey("Title"), value: myValue)
- Açıklama: Belirli bir başlık anahtarı (
NavigationLink(value:label:)
:- Açıklama: Belirli bir değer (
value
) ve bir label (label
) ile bir navigation link oluşturur. Bu değer, genellikle birNavigationPath
ile birlikte kullanılır.Kullanım: Bu yöntem, bir değeri navigation state’e aktarmak ve label olarak bir view kullanmak için kullanışlıdır.
NavigationLink(value: myValue) { Text("Label") }
- Açıklama: Belirli bir değer (
NavigationLink(destination:label:)
:- Açıklama: Belirli bir hedef view (
destination
) ve bir label (label
) ile bir navigation link oluşturur.Kullanım: Bu yöntem, belirli bir hedef view’e geçiş yapmak ve label olarak bir view kullanmak için kullanışlıdır.
NavigationLink(destination: MyDestinationView()) { Text("Label") }
- Açıklama: Belirli bir hedef view (
Bu initializer’lar, SwiftUI’da navigation işlemlerini esnek ve kolay bir şekilde yapmanızı sağlar. Kendi kullanım senaryonuza göre bu initializer’lardan birini seçebilirsiniz.
2. NavigationStack
SwiftUI’da ekranlar arasında gezinmeyi sağlayan yeni bir yapı taşıdır. NavigationStack
, gezinme yığınının yönetimini sağlar ve kullanıcıların birden fazla ekranda gezinebilmeleri için gereken altyapıyı oluşturur.
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationStack {
VStack {
NavigationLink(destination: DetailView()) {
Text("Go to Detail View")
}
}
.navigationTitle("Home")
}
}
}
struct DetailView: View {
var body: some View {
Text("This is the Detail View")
.navigationTitle("Detail")
}
}
3. NavigationPath
NavigationPath
, gezinme yığınının durumunu izler ve belirli türdeki verileri tutar. Bu sayede, dinamik olarak farklı görünümler arasında geçiş yapabilirsiniz. NavigationPath
, yığın tabanlı gezinme modelinin daha esnek ve veri odaklı bir şekilde yönetilmesine olanak tanır.
Özellikler ve Yöntemler:
append(_:)
: Yola yeni bir öğe ekler.removeLast()
: Yoldaki son öğeyi kaldırır.removeLast(_:)
: Yoldan belirli sayıda öğe kaldırır.
4. navigationDestination
.navigationDestination
, belirli bir veri türüne dayalı olarak bir görünüm tanımlamanıza olanak tanır. Bu, dinamik ve tür bazlı gezinme yapıları oluşturmanıza yardımcı olur. navigationDestination
, genellikle NavigationStack
ile birlikte kullanılır ve belirli veri türleri için hedef görünümleri belirlemenize olanak tanır.
navigationDestination
, NavigationStack
içinde tanımlanır ve bir NavigationPath
‘de bulunan belirli bir veri türü için hedef bir görünüm sağlar.
import SwiftUI
struct ContentView: View {
@State private var path = NavigationPath()
var body: some View {
NavigationStack(path: $path) {
VStack {
Button("Go to Number Detail View") {
path.append(42) // Integer türü veriyi yığına ekler
}
Button("Go to Text Detail View") {
path.append("Hello, SwiftUI!") // String türü veriyi yığına ekler
}
}
.navigationDestination(for: Int.self) { number in
NumberDetailView(number: number)
}
.navigationDestination(for: String.self) { text in
TextDetailView(text: text)
}
}
}
}
struct NumberDetailView: View {
var number: Int
var body: some View {
Text("Detail View with number: \\(number)")
}
}
struct TextDetailView: View {
var text: String
var body: some View {
Text("Detail View with text: \\(text)")
}
}
Hepsi Bir Arada Örnek Kullanım:
SwiftUI 4.0 ve iOS 17 ile birlikte gelen NavigationStack
ve NavigationPath
kullanılarak daha dinamik ve karmaşık gezinme yapıları oluşturulabilir. NavigationLink
bu yeni yapılarla uyumlu bir şekilde çalışır.
import SwiftUI
struct ContentView: View {
@State private var path = NavigationPath()
var body: some View {
NavigationStack(path: $path) {
VStack {
NavigationLink("Go to Number Detail View", value: 42)
NavigationLink("Go to Text Detail View", value: "Hello, SwiftUI!")
}
.navigationDestination(for: Int.self) { number in
NumberDetailView(number: number)
}
.navigationDestination(for: String.self) { text in
TextDetailView(text: text)
}
}
}
}
struct NumberDetailView: View {
var number: Int
var body: some View {
Text("Detail View with number: \\(number)")
}
}
struct TextDetailView: View {
var text: String
var body: some View {
Text("Detail View with text: \\(text)")
}
}
Yukarıda Bahsedilen Yapıların En Kısa Özeti
- NavigationLink: Bir görünüme geçiş yapmak için kullanılır; belirli bir hedef görünümüne bağlantı sağlar.
- NavigationStack: Gezinti hiyerarşisini yönetir.
- NavigationPath: Gezinti yığınının durumunu izler ve belirli türdeki verileri (rotaları) saklar.
- navigationDestination: Belirli veri türleri için hedef görünümleri tanımlar.