IBInspectable属性和IBDesignable UIViews是最近Xcode发行版中最酷的一项(或两项)新功能。这些与您的应用程序功能无关,而会影响Xcode中的开发人员体验。目的是能够在不运行iOS的情况下直观地检查自定义视图。因此,假设您有一个自定义视图CustomView,该视图创造性地命名自,继承自UIView。在此自定义视图中,它将显示具有指定颜色的文本字符串。您也可以选择不显示任何文本。我们需要三个属性:
var textColor: UIColor = UIColor.blackColor() var text: String? var showText: Bool = true
然后,我们可以覆盖drawRect该类中的函数:
if showText { if let text = text { let s = NSString(string: text) s.drawInRect(rect, withAttributes: [ NSForegroundColorAttributeName: textColor, NSFontAttributeName: UIFont(name: "Helvetica Neue", size: 18)! ]) } }
假设text已设置该属性,则在运行应用程序时,它将在视图的左上角绘制一个字符串。问题是如果不运行该应用程序,我们将不知道它是什么样。这是IBInspectable和IBDesignable进来, IBInspectable使我们能够在Xcode视图的视觉组属性值,就像内置的控制。 IBDesignable将在情节提要中向我们显示视觉预览。这是该类的外观:
@IBDesignable class CustomView: UIView { @IBInspectable var textColor: UIColor = UIColor.blackColor() @IBInspectable var text: String? @IBInspectable var showText: Bool = true override func drawRect(rect: CGRect) { // ... } }
或在目标C中:
IB_DESIGNABLE @interface CustomView: UIView @property (nonatomic, strong) IBInspectable UIColor* textColor; @property (nonatomic, strong) IBInspectable NSString* text; @property (nonatomic, assign) IBInspectable BOOL showText; @end @implementation CustomView - (instancetype)init { if(self = [super init]) { self.textColor= [UIColor blackColor]; self.showText= YES; } return self; } - (void)drawRect:(CGRect)rect { //... } @end
下一个屏幕截图显示了Xcode中发生的情况。第一个是添加修订的类后发生的情况。请注意,这三个属性有三个新的UI元素。“文本颜色”将显示一个颜色选择器,“文本”只是一个输入框,“显示文本”将为我们提供Off和的选项,分别On是false和true。
接下来是使用颜色选择器将“文本颜色”更改为红色之后。此外,还提供了一些文本来使drawRect函数显示它。请注意,Interface Builder中的视图也已更新。
最后,在属性检查器中将“显示文本”设置为Off会使“界面生成器”中的文本显示消失。
但是,当我们需要UIView在您的多个视图中创建四舍五入时,我们都会遇到这种情况。Storyboard与其声明IBDesignable每个视图Storyboard,不如创建一个ExtensionofUIView并为您的UIView整个项目建立一个专门为您创建的用户界面,都更好通过radius.A在您在情节提要中创建的任何UIView上设置可配置的角边界半径来查看。
extension UIView { @IBInspectable var cornerRadius:CGFloat { set { layer.cornerRadius= newValue clipsToBounds = newValue > 0 } get { return layer.cornerRadius } } }