2015-09-08 26 views
8

私はUButtonクラスを拡張しようとしていますが、アプリケーションをビルドすることなくデザイン時に変更できるcornerRadiusプロパティを追加しました。@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

戦争*これは実行時の影響を表示する* mean? '@ IBDesignable'&' @ IBInspectable'はインターフェイスビルダーのフックです。実行時には意味がありません – vikingosegundo

+0

mease bordercolorはストーリーボードまたはペン先には表示されません。アプリケーションが実行されているときに表示されます –

+0

明快さを追加しようとしていますが、実行時にコードが機能するのに対し、問題は '@ IBDesignable'と' @ IBInspectable'の周りにあります。 Interface Builderを使用して設計時に*とやりとりしますが、残念なことにInterface Builderはこれらの属性を拡張機能に追加すると認識しません。つまり、コード例では、 '@ IBDesignable'と' @ IBInspectable'は実際に何かを実行します。それを削除した場合とまったく同じ方法で動作します。より正確には* Interface Builderでは動作しません。 – MarqueIV