2015-09-08 44 views
8

我想通过添加可在设计时更改而不必构建应用程序的cornerRadius属性来扩展UIButton类。我使用下面的扩展类:@IBDesignable UIButton扩展

import UIKit 

@IBDesignable 
extension UIButton { 

    @IBInspectable var cornerRadius :CGFloat { 

     get { 
      return layer.cornerRadius 
     } 

     set { 

      layer.cornerRadius = newValue 
      layer.masksToBounds = newValue > 0 
     } 
    } 

} 

但是,当我在做故事板属性cornerRadius的变化我没有看到变化发生的现场!我错过了什么!

回答

15

扩展名不符合IBDesignable限定符。只有实际的子类。令人讨厌但真实。

+1

效应也许在将来,我们将获得该功能!它有点糟糕:( –

-6

试试这个代码:

@IBDesignable extension UIView { 
    @IBInspectable var borderColor:UIColor? { 
      set { 
       layer.borderColor = newValue!.CGColor 
      } 
      get { 
       if let color = layer.borderColor { 
        return UIColor(CGColor:color) 
       } 
       else { 
        return nil 
       } 
      } 
     } 
    } 

这将显示在运行时

+1

战争确实*这会在运行时显示效果*意味着?@ @ IBDesignable'&'@ IBInspectable'是接口生成器的钩子,它们在运行时是不相关的 – vikingosegundo

+0

mease bordercolor不显示在故事板或笔尖,它会在运行应用程序时显示 –

+0

只是为了增加清晰度,尽管是的,你的代码在运行时会工作,问题是'@ IBDesignable'和'@ IBInspectable',它们用于标记视图和属性,你可以然后通过Interface Builder在设计时与*进行交互,不幸的是Interface Builder在添加到扩展中时不能识别这些属性。换句话说,在你的代码示例中,@ IBDesignable和@ IBInspectable没有实际上做任何事情,如果你删除它们,或者更准确地说,它的工作方式完全相同,*在Interface Builder中不工作。 – MarqueIV