TabbarController Veri Alışverişi

UITabBarController iOS uygulamalarında çok kullanılan sayfalara kolay erişim sağlayabilmek için ekranın alt tarafında bulunan ikonlar vasıtasıyla erişilen tab ları yöneten bir sınıftır.

Bu aslında en çok kullandığımız ViewController sınıfları anlamına geliyor çünkü her bir tab aslında bir ViewController tarafından yönetiliyor. Dolayısıyla ViewController sınıfları arasında obje alışverişi yapma ihtiyacı doğuyor.

Sınıflar arası veri alışverişi sağlamak için Delegates and Protocols, Notification Center veya statik değişkenler kullanılabilsine rağmen durum spesifik olarak TabBar komponentleri arasında olduğu zaman farklı bir yol izlemek daha mantıklı olabilir.

Ben bu yazıda TabBarController sınıfını subclass yaparak veri alışverişi sağlamayı anlatacağım.

Hadi başlayalım. 🎬

TabBarController tab ları arasında veri alışverişi yapabilmek şu adımları takip edeceğiz:

  • Tab lar tarafından ortak kullanılacak bir sınıf yaratacağız.
  • UITabBarController sınıfından türettiğimiz bu alt sınıfta ortak olarak kullanılacak değişkenleri belirleyeceğiz.
  • Her bir tabı yöneten ViewController sınıfında bu ortak değişkenlere erişip modifiye edeceğiz.

 

TabBarController Alt Sınıfı

BaseTabBarController isminde, UITabBarController sınıfını miras alan bir sınıf yaratalım.

 

TabBar komponentleri tarafından ortak kullanılacak değişkenleri belirleyelim.

 

Storyboard üzerinden TabBarController komponentinin BaseTabBarController sınıfını kullanmasını isteyelim.

 

Ortak Değişkene Erişmek

BaseTabBarController sınıfında tanımladığımız değişkene içinde barındırdığı ViewController üzerinden erişmek için yapacağımız iş basit:

Bulunduğumuz ViewController ı yöneten TabBarController komponenti BaseTabBarController sınıfı ise bundan bir obje yaratıp sınıf değişkenlerine erişeceğiz.

Böylece güzelim et yemeklerini konsolda görebileceğiz 😀

Aynı şekilde diğer ViewController sınıfı içinden de ortak TabBar itemlerine erişebileceğiz çünkü onu da BaseTabBarController sınıfı yönetiyor.

 

Önemli Not

Bu yöntem ile veriler call by reference yapısıyla taşınır. Dolayısıyla bu ortak değişkenlere eriştiğiniz yerde yapacağınız bir modifikasyon BaseTabBarController içinde bulunan tüm sınıflar tarafından etkilenir.

Örneğin ilk tabı yöneten FirstViewController sınıfımızda

ifadesini kullanırsak BaseTabBarController sınıfındaki orijinal array i değiştirmiş oluruz ve dolayısıyla SecondViewController üzerinden bu array e erişmek istediğimizde çıktımız

olur.