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
エラーが私が取得:
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
:私の後に私の見解の
私は上記の下部に表示されるように取得しようとしているビュー絵コンテ:
マイコード:
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
}
}
これまでに作成したことがあれば、読んでいただきありがとうございます。私が逃しているものが見えたら、私はあなたの提案を歓迎する。
実装で 'prepareForInterfaceBuilder'関数が表示されません。 –