2017-05-29 7 views
1

UIViewカスタムをインターフェイスビルダで設定して、表示するビューを取得しようとしています。私はカスタムXibでこれをやろうとするたびにxibをインターフェイスビルダでうまく見せることができますが、MyCustomViewをインターフェイスビルダーのUIVewControllerにドロップしようとすると、コンパイラエラーが発生します。 「ちょうどあなたのクラス宣言の前に@IBDesignableを追加し、VARSの前に@IBInspectableを配置し、魔法が起こるのを見る」(例:WWDC 2015 video@IBDesignable UIViewをクラッシュせずに描画するInterface Builder

私が見てきたすべてのチュートリアルでは、このような何かを行きます。またはそれはObjective-Cで、または中国語の字幕などでアラム語で30分のビデオです。

私の最終目的は、 xibは私がドラッグしたUIViewを塗りつぶし、@IBInspectableのプロパティを微調整することができます。私は答えを見てきた

SO Post: @IBDesignable crashing agent

NS Hipster

A Medium Post

エラーが私が取得:

Base.lproj/Main.storyboard: error: IB Designables: Failed to render and update auto layout status for PlaylistViewController (o1G-QR-OwX): The agent crashed

Base.lproj/Main.storyboard: error: IB Designables: Failed to update auto layout status: The agent crashed

アイデンティティインスペクタのための私のCurrentlyPlayingView:私の後に私の見解の enter image description here

ストーリーボードは、前述のエラーを取得: enter image description here

私は上記の下部に表示されるように取得しようとしているビュー絵コンテ:

enter image description here

マイコード:

import UIKit 

@IBDesignable class CurrentlyPlayingView: UIView { 

    var view = UIView() 

    @IBOutlet weak var titleLabel: UILabel! 
    @IBOutlet weak var subtitleLabel: UILabel! 
    @IBOutlet weak var progressSlider: UISlider! 

    // IBInspectable attributes 

    @IBInspectable public var titleLabelColor: UIColor = .black { 
     didSet { 
      self.titleLabel.textColor = titleLabelColor 
     } 
    } 

    @IBInspectable public var subtitleLabelColor: UIColor = .black { 
     didSet { 
      self.subtitleLabel.textColor = subtitleLabelColor 
     } 
    } 

    @IBInspectable public var sliderMinColor: UIColor = .blue { 
     didSet { 
      self.progressSlider.minimumTrackTintColor = sliderMinColor 
     } 
    } 

    @IBInspectable public var sliderMaxColor: UIColor = .red { 
     didSet { 
      self.progressSlider.maximumTrackTintColor = sliderMaxColor 
     } 
    } 

    // MARK: - Initialization 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     xibSetup() 
     initialConfig() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     xibSetup() 
     initialConfig() 
    } 

    private func initialConfig() { 
     self.titleLabel.textColor = titleLabelColor 
     self.subtitleLabel.textColor = subtitleLabelColor 
     self.progressSlider.minimumTrackTintColor = sliderMinColor 
     self.progressSlider.maximumTrackTintColor = sliderMaxColor 
    } 

    // MARK: - Nib handlers 

    private func xibSetup() { 
     view = loadViewFromNib() 
     view.frame = bounds 

     // Make the view stretch with containing view 
     view.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleHeight] 

     // Adding custom subview on top of our view (over any custom drawing > see note below) 
     addSubview(view) 
    } 

    private func loadViewFromNib() -> UIView { 
     let bundle = Bundle(for: type(of: self)) 
     let nib = UINib(nibName: "CurrentlyPlayingView", bundle: bundle) 

     // Assumes UIView is top level and only object in CustomView.xib file 
     let view = nib.instantiate(withOwner: self, options: nil).first as! UIView 
     return view 
    } 
} 

これまでに作成したことがあれば、読んでいただきありがとうございます。私が逃しているものが見えたら、私はあなたの提案を歓迎する。

+0

実装で 'prepareForInterfaceBuilder'関数が表示されません。 –

答えて

1

prepareForInterfaceBuilder機能が不足していると思われます。

このような機能をオーバーライドします。

override func prepareForInterfaceBuilder() { 
     super.prepareForInterfaceBuilder() 
     //setup your view with the settings 
    } 

OPによって補足:

あなたはYourViewControllerに出UIViewをドラッグして、「ターゲットからの継承」を確保、YourCustomViewにアイデンティティインスペクタでそのカスタムクラスを設定したら、Xcodeの8のよう(チェックされています。バツ)。

関連する問題