Aşağıdaki kod setine sahibim:
CustomView.h
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface CustomView : UIView
@property (nonatomic) IBInspectable UIColor *borderColor;
@property (nonatomic) IBInspectable CGFloat borderWidth;
@property (nonatomic) IBInspectable CGFloat cornerRadius;
@end
CustomView.m
#import "CustomView.h"
@implementation CustomView
- (void)setBorderColor:(UIColor *)borderColor {
_borderColor = borderColor;
self.layer.borderColor = borderColor.CGColor;
}
- (void)setBorderWidth:(CGFloat)borderWidth {
_borderWidth = borderWidth;
self.layer.borderWidth = borderWidth;
}
- (void)setCornerRadius:(CGFloat)cornerRadius {
_cornerRadius = cornerRadius;
self.layer.cornerRadius = cornerRadius;
}
@end
(Swift referansı için, bu sorun Swift kodunda da meydana geliyordu)
CustomView.swift
@IBDesignable
class CustomView : UIView {
override init(frame: CGRect) {
super.init(frame: frame)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
@IBInspectable var borderColor : UIColor = UIColor.clearColor() {
didSet {
self.layer.borderColor = borderColor.CGColor
}
}
@IBInspectable var borderWidth : CGFloat = 0.0 {
didSet {
self.layer.borderWidth = borderWidth
}
}
@IBInspectable var cornerRadius : CGFloat = 0.0 {
didSet {
self.layer.cornerRadius = cornerRadius
}
}
}
UIView
Film şeridinde bir görünüm denetleyicisine bir ekledim ve alt sınıfını olarak ayarladım CustomView
.
Bu, "Tasarlanabilirler" satırını ekler. "Güncelleniyor" da takılı kaldı ve araç ipucu "Hedefin Oluşturulması Bekleniyor" diyor. Bu durumdan asla değişmez.
İnceleme özniteliklerine geçtiğimde, şu IBInspectable
özellikleri ayarlayabiliyorum :
Ve bir kez ayarlandıktan sonra, "Kullanıcı Tanımlı Çalışma Zamanı Özellikleri" nde de görünürler:
Bununla birlikte, "Tasarlanabilirler" durumu, hala aynı araç ipucuyla "Güncelleme" nin ötesine geçmez (Cmd + B'yi birkaç kez denedim, hiçbir şey değişmedi).
Dahası, IBInspectable
özellikleri belirledikçe her biri için bir uyarı alıyorum:
IBDesignables - "UIView" örneğinde "borderColor" anahtar yolu için kullanıcı tanımlı çalışma zamanı özniteliği yoksayılıyor ... bu sınıf, borderColor anahtarı için anahtar-değer kodlaması uyumlu değildir.
Oluşturulan uyarıların ekran görüntüsü:
Anahtar-değer kodlamayla uyumlu sorunlara aşinayım ve genellikle bunları nasıl çözeceğimi biliyorum ... ancak burada bu sorunu nasıl çözeceğimi anlamıyorum. Görünümün kimlik denetçisine göre, görünüm bir "Özel Görünüm" dür (bu özelliklere sahip olmayan normal bir "UIView" değildir). Ve eğer görünüm bir "Özel Görünüm" olmasaydı, bu tasarlanabilir özellikler Nitelik Denetçisi'nde görünmezdi, değil mi? Ancak Arayüz Oluşturucu bu öznitelikleri görünüme uygulamaya çalıştığında, görünümün sınıfının "UIView" olduğunu düşünmeye geri döner ve öznitelikleri uygulayamaz.
Herhangi bir yardım? Lütfen bazı önemli ayrıntıları atladıysam bana bildirin, ancak değeri ne olursa olsun, bu öğreticiyi tam olarak takip ettim (ObjC vs Swift dışında). Bu öğreticiyi tam olarak başka bir makinede takip ettiğimi ve bir cazibe gibi çalıştığını da belirtmek gerekir (dün gece bu yazıyı yapmak istedim, ancak o sırada bulunduğum bilgisayarda bu sorun yoktu).
Yorumlara dayanarak, belki .m
dosyanın dahil edilmediği ve soruna neden olabileceği öne sürülmüştür . Bu senaryonun böyle olması için kesinlikle yolumdan çekileceğimi düşündüm, ama yine de kontrol ettim.
Bunu yapmaya ilk başladığımda, IB_DESIGNABLE
sınıfların farklı bir UIKit
çerçevenin parçası olması gerektiği anlayışındaydım . Bu ilk ekran görüntüsünden, tek bir sınıfa sahip bir "CustomViews" çerçevesi oluşturduğumu görebilirsiniz CustomView
. Burada ayrıca OtherView
, CustomView
ayrı bir çerçevede olmaması dışında , ile aynı olan a'yı da oluşturduğumu göreceksiniz . Bununla birlikte, aynı sorun, her iki sınıf arasındaki film şeridinde de devam ediyor.
Burada CustomView.m
, CustomViews
çerçeve ile oluşturulacağını belirten bir ekran görüntüsü var :
Bu arada, aşağıdaki ekran görüntüsü birkaç şeyi göstermektedir:
CustomViews.framework
ana projeye uygun şekilde dahil edilmiştir.OtherView.m
aynı zamanda bir derleme kaynağı olarak da dahil edilmiştir, bu nedenle ile ilgili bir sorun olsa bileCustomView
,OtherView
bu aynı hataları oluşturduğunu ancak çalışması gerekir.Main.storyboard
veLaunchScreen.xib
kırmızı olarak görünüyor. Neden olduğuna dair hiçbir fikrim yok ve nedenLaunchScreen.xib
olması gerektiği konusunda en ufak bir fikrim yok (bu dosyaya dokunmadım), ancak diğer projelere baktıktan sonra söyleyebileceğim,Main.storyboard
bu projeler için de kırmızı renkte görünüyorum ve ben onunlaIB_DESIGNABLE
ya daIBInspectable
orada hiçbir şey yapmamak .
Bunu birkaç kez denedim ve tekrar denedim. Evde bilgisayarımda her zaman çalışıyor - Bu soruda anlatılan sorunu evde yeniden oluşturamıyorum. İş yerinde asla işe yaramaz. Bu soruda açıklanan sorun her seferinde olur.
Her iki bilgisayar da bu yıl yeni satın alınan Mac Minis'tir (yeni modeller değil, 2012 sonundaki model). Her iki bilgisayarda da OS X Yosemite 10.10 çalışıyor. Her iki bilgisayar da Xcode Sürüm 6.1 çalıştırıyor. Evde yapı (6A1052d). Bu sabah, her iki bilgisayarın da aynı Xcode sürümlerini çalıştırdığını doğrulayabilirim.
Diğerleri bana RAM'in bozuk olabileceğini önerdi. Bu bana çok uzak görünüyor. Projeyi birden çok kez yeniden başlattım, bilgisayarı birden çok kez yeniden başlattım. Bana öyle geliyor ki, yaklaşık 6 aylık bir bilgisayarda bozuk RAM olsaydı, başka sorunlar da görebilirdim ve bu sorun daha az tutarlı olurdu. Ancak bu sorun, birçok kez tüm projeyi sıfırdan yeniden başlatıp bilgisayarda tamamen yeniden başlatılmasına rağmen devam ediyor.
Bu projeyi gerçekten derleyip çalıştırırsam, IBInspectable
özelliklere sahip özel görünümün aslında film şeridinin göstermesini beklediğim gibi görüntülendiğini belirtmek gerekir. IB_DESIGNABLE
Ve IBInspectable
direktifleri olmasa bile , bunlar Kullanıcı Tanımlı Çalışma Zamanı Nitelikleri olarak oluşturuldukları için durumun böyle olacağını hayal ediyorum .