UIKit: XIB

XIB dosyaları, uygulama arayüzümüzü parça parça oluşturmamızı sağlayan araçlardır.

Can Balkaya
TurkishKit
6 min readSep 24, 2020

--

Merhaba sevgili TurkishKit okuyucuları! 👋🏼 Bugün sizlerle XIB dosyalarını kullanarak nasıl uygulama arayüzü geliştirebileceğimizi öğreneceğiz. Hazırsanız hemen başlayalım! 🤗

XIB Nedir?

XIB dosya türü Storyboard dosya türüne oldukça benzerdir. Aralarındaki en büyük fark; Storybord’un ViewController, XIB dosyalarının ise direkt View elemanlarını oluşturmak ve düzenlemek için olmasıdır.

XIB dosya teknolojisi pek de yeni bir teknoloji sayılmaz: XIB dosyaları zamanının NIB -NeXT Interface Builder- dosyalarının yeni nesil hali gibi düşünülebilir. Hatta bu teknolojinin 1980'lerin sonlarına doğru ortaya çıktığını söyleyebiliriz.

Hadi Kodlayalım

XIB dosyaları hem programsal olarak hem de Storyboard üzerinde kullanılabilir. Bu makalemizde iki tarafta da nasıl kullanıldığını öğreneceğiz. Tabii onlardan önce yeni bir Xcode projesi oluşturmalıyız.

Xcode projemizi oluşturduktan sonra cmd+N tuşuna basıp “View” türünden bir dosya oluşturalım.

Burada oluşan UIView elemanının bir UIViewController elemanı boyutunda olmasını istemiyoruz. Bu yüzden, “Size” özelliğini “Freeform” olarak değiştirelim.

Elemanın boyutunu değiştirebilmek için “Size Inspector” bölümüne gelip “Height” özelliğini 240 olarak değiştirelim.

Artık arayüz elemanlarımızı oluşturabiliriz. İlk önce kordinatları ve boyutu X: 20 | Y: 20 | Width: 150 | Height: 200 olacak şekilde bir UIImageView elemanı ekleyelim.

Bu elemanın içerisine de bir fotoğraf ekleyelim. (Siz de elemanın boyutlarına yakın bir resim ekleyebilirsiniz.)

Bir başlığa ihtiyacımız olduğundan kordinatları ve boyutu X: 180 | Y: 20 | Width: 214 | Height: 30 olan bir UILabel elemanı oluşturalım.

Bu elemanın yazı boyutunu 25 ve stilini “Bold” olarak ayarlayalım.

Başlığın altında bir açıklamanın olması için kordinatları ve boyutu X: 180 | Y: 20 | Width: 214 | Height: 30 olan bir UILabel elemanı oluşturalım.

Bu UILabel elemanı birden fazla satırdan oluşan metinler barındıracağı için satır sayısını “0” olarak ayarlayalım.

Elemanımızın daha gerçekçi gözükebilmesi için UILabel elemanlarına gerçek içerikler yazabiliriz.

Son olarak, elemanımızın farklı boyutlarda da düzgün görünebilmesi için içerisindeki elemanların “auto layout”unu iyi bir şekilde ayarlayalım.

Auto layout hakkında pek fazla bilgi sahibi değilseniz daha önce bu konu hakkında yazmış olduğumuz yazımızı okuyabilirsiniz:

UIView elemanının içerisindeki elemanları kod üzerinde tanımlamak için “ProductView” adında yeni bir Swift dosyası oluşturalım ve elemanımızın sınıfını ona eşitleyelim.

Sonrasında aşağıdaki gibi elemanları teker teker kod sayfasına bağlayalım.

“ViewController.swift” sayfasına dönelim ve “ProductView” elemanını “viewDidLoad” fonksiyonunun içerisinde tanımlayalım.

“productView” elemanını UIViewController elemanına ekleyelim.

“ProductView” elemanını istediğimiz şekilde ekrana yerleştirebilmek için “translatesAutoresizingMaskIntoConstraints” elemanına “false” değerini vermeliyiz.

Bu elemanın içerisindeki elemanların değerlerini aşağıdaki gibi değiştirebiliriz.

Elemanımızın konumunu ve boyutunu ayarlayabilmek için NSLayoutConstraint yapısını kullanalım.

Bu şekilde projeyi çalıştırdığımızda uygulamamızın içerisinde elemanımızı görebiliriz.

XIB dosyalarını, sadece programsal olarak eleman oluşturmanın yanı sıra Storyboard üzerinde de eleman oluşturmak için kullanabiliriz. (Bu sayede, kendi oluşturmuş olduğunuz elemanları, tıpkı Xcode’un sizlere sunduğu elemanlar gibi kullanabilirsiniz!) Bunu göstermek için “ProductSuperview” adında yeni bir Swift dosyası oluşturalım.

Bu dosyayı oluşturmamızın sebebi, “ProductView” elemanımızı Storyboard üzerinde kullanılabilir bir hale getirmektir. Bunun olabilmesi için de “ProductView” elemanının belli fonksiyonların içerisinde tanımlanıp ana UIView elemanının içerisine eklenmelidir. Bunun için “addProductView” adında bir fonksiyon oluşturalım.

@IBDesignable nedir? 🤔

@IBDesignable yapılan tasarımsal değişiklikleri direkt Storyboard dosyaları üzerinden görüntüleyebilmenizi sağlayan bir yapıdır.

@IBDesignable hakkında daha fazla bilgi edinmek isterseniz, ilgili yazımızı aşağıdaki bağlantıdan inceleyebilirsiniz:

Bu fonksiyon içerisinde az önce yaptığımız gibi “ProductView” elemanını çağıralım.

Aynı şekilde kendisini ana UIView yapısına ekleyelim.

Elemanımızın konum ve boyutunda değişiklikler yapmadan önce yine “translatesAutoresizingMaskIntoConstraints” özelliğini “false” değerine eşitleyelim.

NSLayoutConstraint yapısıyla elemanımızın konumunu ve boyutunu ayarlayalım. (Burada elemanımızın konumunu her taraftan merkeze aldık. Boyutunu ise kendisine eşitledik.)

XIB dosyamızın içerisindeki elemanı oluşturmak için az önce oluşturduğumuz fonksiyonu “awakeFromNib” fonksiyonunda çalıştıralım.

Aynı zamanda elemanımızın Storyboard sayfalarında derlenebilmesi için fonksiyonumuzu “prepareForInterfaceBuilder” fonksiyonunun içerisinde çalıştıralım.

Artık “ProductSuperview” elemanımızı “Main.storyboard” sayfamızın içerisindeki UIViewController elemanımızın içerisinde oluşturabiliriz. Bunu yapabilmek için yeni bir UIView elemanı oluşturalım.

Sonrasında bu oluşturduğumuz UIView elemanının sınıfını “ProductSuperview” olarak ayarlayalım.

Projeyi çalıştırdığımızda da göreceğiniz üzere uygulamada hem programsal olarak hem de Storyboard üzerinden oluşturulmuş iki tane “ProductView” elemanı mevcut.

Bu makalemizde yapmış olduğumuz projemize buradan ulaşabilirsiniz:

Bir makalemizin daha sonuna geldik. Bu makalemizde XIB dosyaları ile nasıl arayüz elemanları oluşturabileceğimizi öğrendik. Keyifli kodlamalar! 🧠

Swift Öğrenin. Uygulama Geliştirin. Sınırların Ötesine Geçin.

Hem kod yazmaya yeni başlayanların hem de profesyonellerin rahatlıkla takip edebilecekleri 40 saatlik videolu eğitim ile Swift programlama dilini derinlemesine keşfedin. Eğitim boyunca karşılaşacağınız problemleri birebir online görüşmelerde çözün.

Bizi daha yakından takip etmek istiyorsanız, sosyal medya hesaplarımıza aşağıdan ulaşabilirsiniz!

Twitter | Instagram | Facebook

--

--