SwiftUI 2 Navigasyonlara Giriş

Erdal Cinar
ÇSTech
Published in
3 min readJun 29, 2022

Günümüzde tek bir ekrandan oluşan neredeyse hiç bir uygulama bulunmamakta. Neredeyse her uygulama birden fazla ekrandan oluştuğu için bu sayfalar arasındaki geçiş işlemleri, mobil programlamadaki en onemli noktalardan biridir. SwiftUI’ da ise navigasyon işlemleri, UIKit’dekinden çok farklı . SwiftUI 2 de navigasyon geçişleri için kullandığımız component ise NavigationViewdir (SwiftUI 4 ile deprecated olmuş durumdadır). NavigationView ile sayfalar arası geçişler ve data taşımayı kolaylıkla yapabiliriz.

NavigationView’i Nasıl Tanımlarız

NavigationView componentinin çalışabilmesi için en üst katmanda yer alması gerekmektedir. Burada gözüktüğü gibi NavigationView componentinimiz en dış katman olarak yer almakta ve içinde bir Text componenti yer almaktadır.

Navigasyon Sayfalarımıza Başlık Verme

NavigationView sayfalarımıza .navigationTitle() ile başlık da eklenebilmektedir.

Görüldüğü gibi .navigationTitle() komutunu NavigationView componentine değil, bunun içinde yer alıp, ekranı kapsayan componente ekledik. Çünkü vermiş olduğumuz başlık, mevcut da bulunduğumuz sayfanın başlığı olmaktadır. Bir başka sayfaya NavigationView üzerinden gittiğimiz zaman bu başlık diğer sayfalarda başlık seklinde değil, bir sonraki sayfadaki back butonun yanında gözükecektir.

image 1.1 navigationTitle

Navigasyon Bar’ı Kullanma

navigationBarItems methodunu kullanarak NavigationView içerisinde bir bar tanımlayabilir ve bu barın içine istediğimiz componentleri verebiliriz.

Burada gözüktüğü gibi navigasyon barımızı trailing ve leading diye ikiye ayırabilir ve içerisine istediğimiz componenti verebiliriz.

image 1.2 navigationBarItems

NavigationLink İle Yeni Sayfalara Geçiş

NavigationView içerisinde yer alan bir sayfamızdan yeni bir sayfaya geçiş yapmak için NavigationLink methodu kullanılmaktadır.

Destination parametresi hangi sayfaya gidileceğini belirtmektedir. Biz burada kendi oluşturduğumuz bir sayfa yerine SwiftUI’ ın kendi componentlerinden birisini verdiğimiz için, kendisi bir sayfa oluşturup içinde vermiş olduğumuz Text componentini göstermektedir. NavigationLink içerisinde yazmış oldugumuz Text(“Yeni sayfaya git”) componenti buton görevi görüp, üzerine tıklanıldığında yeni bir sayfaya yönlendirir.

image 1.3 newPage

NavigationLink İle Sayfalar Arasında Veri Paylaşma

Yeni bir sayfa oluşturduk ve bu sayfaya basit bir şekilde yaşadığımız evin rengini içeren bir yazıyı koyduk. Burada bulunan colorOfHouse değişkeninin ilk aşamada bir değeri yok. Bu değişkenin değeri kendisini çağıran sayfada verilecektir.

Burada gözüktüğü gibi yeni bir sayfaya giderken kullandığımız destination’a oluşturmuş oldugumuz yeni sayfayı verdik. Bu sayfa icinde initial değeri bulunmayan bir değişken olduğu için, bu değişkenin de ilk değerini verdik. Bu sayede sayfalar arasında veri taşıyabilmiş olduk.

image 1.4 share data between views

NavigationLink’i Bir Koşula Bağlama

Kimi zaman bazı işlemlerin sonucuna göre başka bir sayfaya yönlendirmek isteriz. Bu zamanlarda da NavigationLink methodunun içindeki “isActive” parametresinin kullanılması gerekiyor. isActive parametresi Bool bir Binding değişkeni dinleyip, bu değişken true olduğu zaman harekete geçicektir.

NavigationLink içerisine EmptyView verdik. Çünkü bu NavigationLink’in arka planda kalmasını ve sadece shouldLandToNewPage değişkeninin true olduğu durumlarda harekete gecmesini istiyoruz. Belirtmiş oldugumuz değişkenin değişebilmesi icin bir buton oluşturduk ve bu butonun aksiyonunda shouldLandToNewPage değişkenini true ile değiştirdik. Bu sayede NavigationLink methodumuz tekrardan çağrıldı ve yeni sayfaya yönlendirdi.

NavigationLink’i Background Olarak Kullanmak

Liste methodu ile birden fazla ürünü listelediğimizi düşünelim. Kodumuzun daha basit ve okunabilir olması için NavigationLink’i background olarak kullanabiliriz.

Kaynaklar

--

--