Merhaba. Bu yazıda @IBDesignable – @IBInspectable inceliyeceğiz.
@IBDesignable etiketi UIView inherit alan sınıfların storyboard ve ya .xib üzerinden gerçek zamanlı olarak düzenlenmesine izin verir. Mesela cornerRadius verdiğimiz bir View’i build almadan radius’lu halini görebiliriz.
@IBInspectable ise değişkenleri Attributes Inspector’a ekleyip düzenlememizi sağlar. Bu etiketle oluşturulan değişkenler eğer tür uygunsa Storyboard ve ya .xib üzerinde Attributes Inspector’a otomatik eklenir.
Hemen bir örnek oluşturalım. Xcode build animasyonuna benzeyen activity indicator tarzında bir view oluşturuyorum. UIView içerisine bir imageView, altına da bir label ekliyorum. ImageView image ismi ‘checkmark.diamond.fill’. Amacım oluşturduğum view’a corner radius verip build almadan .xib dosyası üzerinde görmek.
UIView
- ImageView(named: “checkmark.diamond.fill”)
- Label

Oluşturduğum .xib dosyasında freeform halinde bulunan view’i düzenlemeyi bitirdim sırada Custom bir UIView sınıfı oluşturmak var.
Custom bir UIView inherit alan sınıf oluşturuyorum.

ve içerisine bir cornerRadius adında bir değişkeni ekliyorum. didSet kullanarak değişkene bir dinleyici atıyorum. Buradaki değer değiştiğinde didSet bloğu tetiklenicek ve view’imizin cornerRadius değeri güncellenicek. Bu değişkene .xib dosyası üzerinde ulaşmak istediğimden dolayı @IBInspectable ile işaretliyorum.

.xib dosyasına geri dönüyorum ve yukarıda oluşturduğumuz view’in sınıfını değiştirip Custom olarak oluşturduğumuz LoadingWithSuccessView sınıfı yapıyorum.

Ardından Attributes Inspector’e geliyorum ve sınıf içerisinde oluşturduğum @IBInspectable değişkeni burada görebiliyorum. Artık buradan yaptığım değişiklikler sınıfımızdaki didSet bloğunu tetikleyecek ve cornerRadiusumuz güncellenicek. Fakat şu an değiştirdiğimizde .xib dosyası üzerinde henüz herhangi bir değişiklik göremiyeceğiz çünkü ;

sınıfımızı @IBDesignable ile işaretlemedik. Ondan dolayı halen böyle görünüyor.

Şimdi sınıfı @IBDesignable ile işaretliyorum. Artık sınıfımız realtime güncelleme alabilir.

SONUÇ
@IBDesignable ile işaretlemiş olduğumuz sınıfa ait olan view’imizin cornerRadius’u build almadan .xib dosyası üzerinde güncelleniyor.
