SwiftUI navigatsiya


ULASHISH

SwiftUI navigatsiya

NavigationStack bilan navigatsiya qilishni, NavigationLink bilan ekranlarni stack’ga qo‘shishni (push) hamda sheet va alert’larni ko‘rsatishni o‘rganing.


NavigationStack va NavigationLink

View’larni stack’ga qo‘shish (push) uchun NavigationStack ni NavigationLink bilan birga ishlating.

Sarlavhalar va toolbar elementlarini qo‘shing.

Sintaksis:

  • NavigationStack { List { NavigationLink("Title", destination: Detail()) } }
  • .navigationTitle("Title")
  • .toolbar { ... }

Misol

import SwiftUI

struct Detail: View {
  let text: String
  var body: some View { Text(text).navigationTitle("Detail") }
}

struct NavStackDemo: View {
  var body: some View {
    NavigationStack {
      List(1...3, id: \.self) { i in
        NavigationLink("Item \(i)", destination: Detail(text: "Item \(i)"))
      }
      .navigationTitle("Items")
      .toolbar { ToolbarItem(placement: .navigationBarTrailing) { Button("Add") {} } }
    }
  }
}
import SwiftUI

struct ContentView: View {
  var body: some View { NavStackDemo() }
}
import SwiftUI

@main
struct MyApp: App {
  var body: some Scene {
    WindowGroup { ContentView() }
  }
}

Misolni ishga tushirish »

Ushbu misol elementlar stack’ini yaratadi va qator bosilganda Detail view’ini push qiladi; unda sarlavha va o‘ng tomonda toolbar tugmasi bor.


Modal ko‘rsatish

Sheet’larni .sheet(isPresented:) bilan, alert’larni esa .alert bilan ko‘rsating.

Sintaksis:

  • .sheet(isPresented: $flag) { View() }
  • .alert("Title", isPresented: $flag) { Buttons... } message: { Text("...") }

Misol

import SwiftUI

struct ModalDemo: View {
  @State private var showSheet = false
  @State private var showAlert = false

  var body: some View {
    VStack(spacing: 12) {
      Button("Show Sheet") { showSheet = true }
      Button("Show Alert") { showAlert = true }
    }
    .sheet(isPresented: $showSheet) {
      VStack(spacing: 12) {
        Text("Hello from a sheet!")
        Button("Close") { showSheet = false }
      }
      .padding()
      .presentationDetents([.medium])
    }
    .alert("Are you sure?", isPresented: $showAlert) {
      Button("Cancel", role: .cancel) { }
      Button("OK", role: .destructive) { }
    } message: {
      Text("This is a confirmation alert.")
    }
    .padding()
  }
}
import SwiftUI

struct ContentView: View {
  var body: some View { ModalDemo() }
}
import SwiftUI

@main
struct MyApp: App {
  var body: some Scene {
    WindowGroup { ContentView() }
  }
}

Misolni ishga tushirish »

Ushbu misol sheet va alert’ni ko‘rsatish uchun boolean qiymatlarni almashtiradi; sheet o‘rtacha balandlik darajasidan (medium detent) va oddiy yopish tugmasidan foydalanadi.



Dasturiy navigatsiya (NavigationPath)

NavigationPath yoki tiplashtirilgan path binding’ni yangilash orqali navigatsiyani kod orqali boshqaring.

Sintaksis:

  • @State private var path: [T] = []
  • NavigationStack(path: $path) { ... }
  • .navigationDestination(for: T.self) { ... }

Misol

import SwiftUI

struct NumberDetail: View {
  let n: Int
  var body: some View { Text("Number: \(n)") }
}

struct PathDemo: 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() } }
      }
      .navigationTitle("Path Demo")
      .navigationDestination(for: Int.self) { n in NumberDetail(n: n) }
    }
  }
}
import SwiftUI

struct ContentView: View {
  var body: some View { PathDemo() }
}
import SwiftUI

@main
struct MyApp: App {
  var body: some Scene {
    WindowGroup { ContentView() }
  }
}

Misolni ishga tushirish »

Ushbu misol Int manzilini push qilish va uni dasturiy ravishda pop qilish (yopish) uchun tiplashtirilgan path’dan foydalanadi.

Maslahat: Deep link’lar uchun dasturiy navigatsiya holatini boshqarishda NavigationPath dan foydalaning.



W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!