2017-05-04 8 views
3

@IBInspectableの仕組みを学ぶためのデモを行っています。それはストーリーボードに表示されるようになぜIBInspectableがストーリーボードからのオプション変数の値を設定していないのですか?

@IBInspectable var intTest:Int = 10 
    @IBInspectable var flag:Bool = false 

まず、私はのUIViewControllerサブクラスの2つの変数を作りました。その後、私はストーリーボードでそれらの変数の値を変更します。

override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     print("intTest value: \(String(describing: intTest))") 
     print("flag value: \(String(describing: flag)))") 
    } 

出力:次に

enter image description here

を、私はこのような「のviewDidLoad()」メソッドでこれらの変数を印刷しようである:

intTest値:90

フラグ値:真

それは私のような変数の宣言を変更する場合を除き、正常に動作し、その後

@IBInspectable var intTest:Int? = 10 
    @IBInspectable var flag:Bool? = false 

は、私は、ストーリーボードでは上記と同じ値を変更しましたが、値は変更されません。

出力は次のとおりです。

intTest値:オプション(10)

フラグ値:オプション(偽)

私だから私の質問は、なぜ値が更新されないされ変数をオプションとして宣言しますか?

別のことは、変数を文字列として受け取ったときに値が更新されるということです。誰も私にこの機能を理解させるのを助けることができます

答えて

0

オプションとして宣言しても問題ありません。 は、同じように以下のコードを微調整:

@IBInspectable var intTest: Int? { 
     didSet { 
      self.intTestTweak = intTest 
     } 
    } 

willSetdidSethereを説明しています。

1

設定するオプションの値IBInspectable VAR

@IBInspectable var placeHolderImage:UIImage? { 
    didSet { 
     leftViewSetting() 
    } 
} 

設定のデフォルト値IBInspectable VAR

@IBInspectable var placeHolderImage:UIImage = UIImage() { 
    didSet { 
     leftViewSetting() 
    } 
} 

このアプローチを使用して、インターフェイスBuilder`で値を変更するたびに、あなたのビューが更新されます。

@IBInspectable var cornerRadius: CGFloat { 
    get { 
     return layer.cornerRadius 
    } 
    set { 
     layer.cornerRadius = newValue 
    } 
} 
+0

変数をオプションとして宣言すると、値は更新されませんが、私の質問はなぜですか? –

+0

'@IBInspectable var placeHolderImage:UIImage?'私はIBInspectable変数をうまく動作させるオプションに変更します。あなたの設計可能なクラスであなたの質問を更新してください。 –

+0

はい、String.Butと同じイメージが更新されていますが、私の質問はIntとBoolの値が更新されない理由です。 –

関連する問題