2015-09-30 10 views
8

私はiOS開発が初めてです。私は迅速に使用しており、プログラムでビューをデザインしたいが、私はIBDesignerとIBInspectableを使ってデザインプロセスをスピードアップしたいと思う。UIViewControllerでIBDesignableとIBInspectableを使用する

今私はさまざまなボタンとラベルが付いたビューコントローラを持っています。ここに私のコードの抜粋です:

@IBDesignable class LandingView: UIViewController, LandingViewProtocol { 

    @IBInspectable lazy var backButton: UIButton = { 
     var button = UIButton() 
     button.backgroundColor = Styles.BUTTON_COLOR 
     return button 
    }() 
    @IBInspectable lazy var caption: UILabel = UILabel() 
} 

私の質問は、今私がIBDesignableとIBInspectableとインタフェースビルダを使用しない方法ですか? .xibを追加する必要はありますか?私は遊び場を使用する必要があることを述べる他のいくつかの質問を見ましたが、私はそれを使用しないようにしようとしていました、私は本質的に私のビューコントローラ全体を見ることが可能かどうかを知りたがっていました。

はIBDesignableを使用して、ビューコントローラのレイアウトをテストするための回避策はあり、

+0

@IBInspectableチュートリアル:https://iosdevcenters.blogspot.com/2017/07/how-to-use-ibinspectable-in-swift-30.html –

答えて

3

、ありがとうございました。

  1. レイアウトのコードで、あなたのビューコントローラあなたはIBDesignable UIViewのサブクラスを作成し、サブビューとしてビューコントローラのビューを追加し、通常
  2. を行うだろうと同じように。
  3. はXIBを作成し、2

は、ステップ2に詳述するとステップで作成したサブクラスにクラスにそのビューを設定し、あなたのIBDesignableのinitWithFrame:メソッドは、これ以上そう

- (instancetype)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    MyViewController *viewController = [MyViewController alloc] init]; 
    viewController.view.frame = self.bounds; 
    [self addSubview:viewController.view]; 
    return self; 
} 

のように見えるかもしれませんinitWithFrameメソッドを使用すると、すべてのレイアウトコードをView Controllerで処理できます。あなたのサブビューのprepareForInterfaceBuilderメソッドで、ビューコントローラにデータを渡すことができます。

+0

UIViewControllerのUIViewを追加する場合は、viewWillなどのViewControllerのライフサイクルが失われていますそしてDidAppear。 それは過度ではありませんか? – OhadM

3

UIViewまたはNSViewから継承しない別のクラスでは、IBDesignableを使用することはできません。

あなたは Interface Builderでのライブ、インタラクティブなカスタムビューの設計を可能にするために[email protected] IBDesignableと @二つの異なる属性 - を使用することができます。IBDesignableについてAppleがガイドラインを確認してください。あなたは UIViewクラスまたはNSViewのクラスから継承するカスタムビューを作成するときに、あなただけのクラス宣言の前に@IBDesignable 属性を追加することができます

出典:Live Rendering

関連する問題