NavigationLink — یہ کیا ہے، SwiftUI میں ٹرانزیشن بٹن

مصنف: IT Sectr اشاعت: 2026-06-25 مطالعے کا وقت: 6 منٹ

NavigationLink SwiftUI میں ایک کنٹرول عنصر ہے جو NavigationStack یا NavigationView میں کسی دوسری اسکرین میں منتقلی کے لیے ڈیزائن کیا گیا ہے۔ Apple Developer Documentation, 2024 کے مطابق، NavigationLink ایک بٹن بناتا ہے جسے دبانے پر ٹارگٹ View نیویگیشن اسٹیک میں رکھ دیا جاتا ہے۔ iOS 16+ میں ٹارگٹ Views کی قبل از وقت انیشیالائزیشن سے بچنے کے لیے براہ راست destination کے بجائے value اور NavigationDestination کے ساتھ NavigationLink استعمال کرنے کی سفارش کی جاتی ہے۔

اہم نکات

  • NavigationLink — SwiftUI میں دوسری اسکرین پر جانے کے لیے بٹن
  • دو شکلیں — destination:label: اور value:label: کے ساتھ
  • Value شکل iOS 16+ (NavigationStack) میں تجویز کردہ
  • Destination شکل View کی قبل از وقت انیشیالائزیشن کا سبب بنتی ہے
  • خودکار انکشافی تیر List میں

NavigationLink ایک View ہے جو دبانے پر نیویگیشن ٹرانزیشن شروع کرتا ہے۔ NavigationStack کے اندر، NavigationLink دبانے سے ٹارگٹ اسکرین اسٹیک پر رکھ دی جاتی ہے اور سسٹم کا واپس بٹن دکھاتا ہے۔ NavigationLink iOS 13 سے موجود ہے اور SwiftUI میں صارف نیویگیشن کا بنیادی طریقہ ہے۔

NavigationLink UIButton سے وراثت نہیں پاتا — یہ ایک SwiftUI View ہے جو خود بخود سیاق و سباق کے مطابق ڈھل جاتا ہے۔ List کے اندر، NavigationLink ایک انکشافی اشارے کے ساتھ ظاہر ہوتا ہے۔ فہرست کے باہر، NavigationLink ایک عام بٹن کی طرح برتاؤ کرتا ہے لیکن نیویگیشن رویے کے ساتھ۔

SwiftUI Lab (2024) کے مطابق، NavigationLink SwiftUI ایپلیکیشنز میں سب سے زیادہ استعمال ہونے والے Views میں سے ایک ہے، صرف Text، Image اور VStack کے بعد۔ انیشیالائزیشن کی شکلوں کے درمیان فرق کو سمجھنا کارکردگی اور پیش قیاسی نیویگیشن رویے کے لیے بہت اہم ہے۔

NavigationLink اندرونی طور پر کیسے کام کرتا ہے

دبانے پر، NavigationLink قریب ترین NavigationStack یا NavigationView سے منسلک نیویگیشن اسٹیک میں ایک قدر (یا destination) شامل کرتا ہے۔ SwiftUI View درجہ بندی کے ذریعے نیویگیشن پاتھ منتقل کرنے کے لیے EnvironmentValue استعمال کرتا ہے۔ NavigationLink اس پاتھ کو Environment سے پڑھتا ہے اور دبانے پر اسے تبدیل کرتا ہے۔

NavigationLink کی دو اہم شکلیں ہیں: destination کے ساتھ (براہ راست ٹارگٹ View کی وضاحت) اور value کے ساتھ (NavigationDestination کے لیے قدر)۔ شکل کا انتخاب iOS ورژن اور نیویگیشن آرکیٹیکچر پر منحصر ہے۔

شکلانیشیالائزرiOS 13–15iOS 16+
DestinationNavigationLink(destination:label:)تجویز کردہتجویز نہیں کردہ
ValueNavigationLink(value:label:)دستیاب نہیںتجویز کردہ
IsActiveNavigationLink(isActive:destination:label:)پروگرامیٹک نیویگیشنتجویز نہیں کردہ

Destination شکل (iOS 13+): NavigationLink(destination: DetailView(), label: { Text("Open") })۔ یہ شکل NavigationLink کو رینڈر کرتے وقت فوری طور پر DetailView بناتی ہے، چاہے صارف نے لنک پر کلک نہ بھی کیا ہو۔ یہ View کی قبل از وقت انیشیالائزیشن اور ممکنہ کارکردگی کے مسائل کا باعث بنتا ہے اگر ٹارگٹ View اپنے انیشیالائزر میں بھاری آپریشنز انجام دیتا ہے۔

Value شکل (iOS 16+): NavigationLink(value: "detail_42", label: { Text("Open") })۔ ٹارگٹ View صرف اس وقت بنایا جاتا ہے جب لنک دبایا جاتا ہے، جب SwiftUI متعلقہ .navigationDestination تلاش کرتا ہے۔ یہ قبل از وقت انیشیالائزیشن کو روکتا ہے اور نیویگیشن کو مزید پیش قیاس بناتا ہے۔

NavigationStack کے ساتھ NavigationLink iOS 16+ میں value شکل میں تبدیل ہونے کی ضرورت ہے۔ آپ نیویگیشن کے لیے ڈیٹا کی ایک قسم (String, Int, enum Route) متعین کرتے ہیں اور .navigationDestination کے ذریعے منزل کو رجسٹر کرتے ہیں۔ NavigationLink صرف قدر کو اسٹیک پر رکھتا ہے، اور SwiftUI دبانے پر ٹارگٹ View بناتا ہے۔

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)
        }
    }
}

// Programmatic navigation:
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("Open Settings") {
                        path.append(AppRoute.settings)
                    }
                }
        }
    }
}

پروگرامیٹک نیویگیشن: پاتھ میں قدر شامل کرنا (path.append کے ذریعے) اسی قدر کے ساتھ NavigationLink دبانے کے برابر ہے۔ یہ ViewModel، Coordinator یا push نوٹیفیکیشنز کے جواب میں نیویگیشن نافذ کرنے کی اجازت دیتا ہے۔

IsActive شکل (NavigationLink(isActive:destination:label:)) مطابقت کے لیے دستیاب ہے لیکن iOS 16+ میں تجویز نہیں کی جاتی۔ پاتھ صف یا NavigationPath پر Binding کے ساتھ value شکل استعمال کریں۔

List میں NavigationLink خود بخود قطار کے دائیں جانب ایک انکشافی اشارہ (chevron) ظاہر کرتا ہے، صارف کو اشارہ کرتا ہے کہ دبانے سے دوسری اسکرین پر جایا جائے گا۔ List تیر کے ظاہر ہونے کا خود بخود انتظام کرتی ہے — ایک عام NavigationLink کے برعکس جو فہرست کے باہر ہوتا ہے، جہاں کوئی تیر نہیں ہوتا۔

iOS 16 کے ساتھ، NavigationLink والی List خود بخود List(data:rowContent:) کے اندر value شکل استعمال کرتی ہے۔ List کے اندر ForEach استعمال کرتے وقت، انکشافی اشارہ بھی خود بخود شامل ہو جاتا ہے۔ اس رویے کو موڈیفائرز کے ذریعے غیر فعال نہیں کیا جا سکتا — صرف NavigationLink کو Button سے تبدیل کرنے سے تیر ہٹ سکتا ہے۔

List میں destination شکل کا مسئلہ: اگر آپ List کے اندر NavigationLink(destination:label:) استعمال کرتے ہیں، تو تمام منزل Views فہرست لوڈ ہوتے ہی فوری طور پر بن جاتے ہیں، چاہے صارف نے لنک پر کلک کیا ہو یا نہیں۔ بڑی تعداد میں قطاروں والی فہرستوں کے لیے، یہ ابتدائی لوڈنگ کو نمایاں طور پر سست کر سکتا ہے اور میموری کی کھپت بڑھا سکتا ہے۔ NavigationStack کے ساتھ value شکل اس مسئلے کو حل کرتی ہے۔

WWDC 2022 (Session 10054) کے مطابق، Apple نئے پروجیکٹس کے لیے NavigationStack اور NavigationLink کی value شکل استعمال کرنے کی سفارش کرتا ہے۔ یہ خاص طور پر متحرک ڈیٹا والی List کے لیے اہم ہے، جہاں قطاروں کی تعداد زیادہ ہو سکتی ہے۔

پیٹرن 1: حسب ضرورت NavigationLink ظاہری شکل۔ NavigationLink کسی بھی View کو بطور لیبل قبول کرتا ہے، جس سے لنک کے لیے حسب ضرورت ڈیزائن بنانے کی اجازت ملتی ہے۔ List کے اندر، یہ خاص طور پر آسان ہے — آپ 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)
}

پیٹرن 2: تیر کے بغیر NavigationLink (حسب ضرورت بٹن)۔ اگر آپ کو انکشافی اشارے کی ضرورت نہیں ہے تو، پروگرامیٹک نیویگیشن کے لیے Button استعمال کریں: path.append(value)۔ یہ حسب ضرورت انٹرفیس عناصر کے لیے مفید ہے جہاں NavigationLink غیر فطری لگتا ہے۔

پیٹرن 3: مشروط نیویگیشن۔ آپ خالی destination استعمال کرکے یا مخصوص اقدار کے لیے .navigationDestination شامل نہ کرکے NavigationLink کو بلاک کر سکتے ہیں۔ پاتھ کے ذریعے پروگرامیٹک نیویگیشن قدر شامل کرنے سے پہلے شرائط کی جانچ کرنے کی اجازت دیتا ہے۔

Hacking with Swift (2024) کے مطابق، NavigationLink کے زیادہ تر مسائل پرانے پروجیکٹس میں destination شکل کے استعمال سے متعلق ہیں۔ NavigationStack میں منتقلی کرتے وقت، تمام NavigationLink(destination:label:) کو NavigationLink(value:label:) سے تبدیل کریں اور روٹ لیول پر .navigationDestination شامل کریں۔

اکثر پوچھے گئے سوالات

SwiftUI میں NavigationLink کیا ہے؟

NavigationLink SwiftUI میں دوسری اسکرین میں منتقلی کے لیے ایک View ہے۔ دبانے پر، یہ ٹارگٹ اسکرین کو NavigationStack یا NavigationView نیویگیشن اسٹیک میں رکھتا ہے۔ یہ دو شکلوں کو سپورٹ کرتا ہے: destination (ٹارگٹ View) اور value (روٹنگ قدر) کے ساتھ۔

NavigationLink کی کون سی شکل بہتر ہے: destination یا value؟

Value شکل (iOS 16+) ترجیح دیتی ہے: ٹارگٹ View صرف دبانے پر بنایا جاتا ہے، لنک رینڈر کرتے وقت نہیں۔ Destination شکل فوری طور پر View بناتی ہے، جو کارکردگی کے مسائل کا سبب بن سکتی ہے۔ iOS 16+ پروجیکٹس کے لیے، value + NavigationDestination استعمال کریں۔

NavigationLink List میں تیر کیوں بناتا ہے؟

SwiftUI خود بخود List کے اندر NavigationLink میں ایک انکشافی اشارہ (تیر) شامل کرتا ہے، جو نیویگیشن کے امکان کی نشاندہی کرتا ہے۔ اس رویے کو غیر فعال نہیں کیا جا سکتا۔ اگر تیر کی ضرورت نہیں ہے تو، path.append() کے ذریعے پروگرامیٹک نیویگیشن کے ساتھ Button استعمال کریں۔

NavigationLink کے ذریعے پروگرامیٹک نیویگیشن کیسے کریں؟

Binding پاتھ کے ساتھ NavigationStack استعمال کریں اور path.append(value) کے ذریعے قدریں شامل کریں۔ یہ اسی value کے ساتھ NavigationLink دبانے کے برابر ہے۔ پروگرامیٹک نیویگیشن ڈیپ لنکس، push نوٹیفیکیشنز اور Coordinator پیٹرن کو نافذ کرنے کی اجازت دیتا ہے۔

کیا NavigationLink کارکردگی کو متاثر کرتا ہے؟

Destination شکل کارکردگی کو متاثر کر سکتی ہے اگر ٹارگٹ Views اپنے انیشیالائزر میں بھاری آپریشنز انجام دیتے ہیں — تمام منزلیں فہرست رینڈر ہونے پر بن جاتی ہیں۔ NavigationStack کے ساتھ value شکل صرف دبانے پر Views بنا کر اس مسئلے کو حل کرتی ہے۔ 50+ قطاروں والی فہرستوں کے لیے، فرق نمایاں ہے۔

خلاصہ

  • NavigationLink — SwiftUI اسکرینوں کے درمیان نیویگیشن ٹرانزیشن کے لیے بٹن
  • Value شکل iOS 16+ میں NavigationStack کے ساتھ تجویز کردہ
  • Destination شکل View کو قبل از وقت بناتی ہے — بڑی فہرستوں سے گریز کریں
  • انکشافی اشارہ — List میں خودکار تیر (غیر فعال نہیں کیا جا سکتا)
  • پروگرامیٹک نیویگیشن path.append() کے ذریعے ڈیپ لنکس اور Coordinator کے لیے
  • NavigationDestination ڈیٹا کی اقسام کے ذریعے ٹارگٹ اسکرینز کو رجسٹر کرتا ہے
  • IsActive شکل — متروک، iOS 16+ پر value شکل استعمال کریں

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں