ناوبری برنامه ای (Programmatic Nav)
«ناوبری برنامه ای (Programmatic Navigation)» یعنی کنترل رفت وآمد با کد. «NavigationPath» مسیر صفحات را نگه می دارد. سپس با دکمه ها مسیر را عوض می کنیم. این روش مثل منوی بازی است. تو با دکمه جلو می روی، یا برمی گردی.
کنترل مسیر با NavigationPath
اینجا با «NavigationStack» و مسیر عددی کار می کنیم. هر عدد یک صفحه است. بنابراین با append جلو می رویم. با removeLast برمی گردیم. عنوان صفحه هم واضح می ماند.
- یک آرایه مسیر از نوع Int بساز.
- NavigationStack را به مسیر وصل کن.
- روی دکمه، مقدار جدید را append کن.
- برای برگشت، آخر مسیر را حذف کن.
import SwiftUI
struct NumberDetail: View {
let n: Int
var body: some View {
Text("Number: \(n)")
}
}
struct ProgrammaticPathDemo: View {
@State private var path: [Int] = []
var body: some View {
NavigationStack(path: $path) {
VStack(spacing: 12) {
Button("Go to 42") {
path.append(42)
}
Button("Back") {
if !path.isEmpty {
_ = path.removeLast()
}
}
}
.navigationDestination(for: Int.self) { n in
NumberDetail(n: n)
}
.navigationTitle("Programmatic")
}
}
}
struct ContentView: View {
var body: some View {
ProgrammaticPathDemo()
}
}
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
نکته: همیشه مقصد تایپ شده تعریف کن. این کار کد را ایمن می کند.
بازنشانی مسیر و پوش چندتایی
گاهی می خواهی از ابتدا شروع کنی. سپس چند صفحه را پشت سرهم هل بدهی. با removeAll به ریشه برگرد. با append(contentsOf:) چند مقصد را یک جا اضافه کن.
- با removeAll مسیر را خالی کن.
- با append(contentsOf:) چند مقدار بده.
- برای هر مقدار، مقصد بساز.
- عنوان صفحه را معنادار نگه دار.
import SwiftUI
struct ResetMultiPushDemo: View {
@State private var path: [Int] = []
var body: some View {
NavigationStack(path: $path) {
VStack(spacing: 12) {
Button("Reset to root") {
path.removeAll()
}
Button("Go to 1 → 2 → 3") {
path.append(contentsOf: [1, 2, 3])
}
}
.navigationDestination(for: Int.self) { n in
Text("Screen #\(n)")
}
.navigationTitle("Reset & Multi-Push")
}
}
}
struct ContentView: View {
var body: some View {
ResetMultiPushDemo()
}
}
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
صفحات مرتبط و مسیرهای بعدی
برای ادامه «ناوبری برنامه ای SwiftUI» این صفحات را ببین: Deep Links و Typed Destinations. همچنین این لینک کمکی: ناوبری برنامه ای SwiftUI.
جمع بندی سریع
- NavigationPath مسیر را نگه می دارد.
- append جلو می برد.
- removeLast برمی گرداند.
- removeAll به ریشه می برد.
- مقصدها را تایپ شده تعریف کن.