「titleText」IBInspectable 属性が機能していないようです。IBInspectable 変数「titleText」を作成する UILabel を持つ単純なフレームワーク ビューがあります。検査可能な「レイヤー」変数は期待どおりに機能しますが、このフレームワークを使用してメインビューを更新することになっているカスタム「titleText」は機能しません。
問題は次のとおりです。
Interface Builder が titleLabel を更新していませんか? (つまり、設計時)つまり、「レイヤー」アイテムで機能しているように、これが機能することを期待しています。
実行時に、titleLabel の値も IB で設定した値を取得していません。実行すると次の出力が得られることに注意してください。つまり、これを生成するコードは、「self.titleLabel」が実際には nil であることがわかりますか??
コードの概要
(b) gcCustomerView.swift
import UIKit
@IBDesignable
class gcCustomView: UIView {
@IBOutlet weak var titleLabel: UILabel!
@IBInspectable var titleText: String = "Default" {
didSet {
if self.titleLabel != nil {
self.titleLabel.text = titleText
} else {
NSLog("Could not set title text as label.text was nil : was trying to set to \(titleText)")
}
}
}
@IBInspectable var cornerRadius: CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadius
layer.masksToBounds = cornerRadius > 0
}
}
@IBInspectable var borderWidth: CGFloat = 0 {
didSet {
layer.borderWidth = borderWidth
}
}
@IBInspectable var borderColor: UIColor? {
didSet {
layer.borderColor = borderColor?.cgColor
}
}
override init(frame: CGRect) {
super.init(frame: frame)
commitInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commitInit()
}
// Private
func commitInit() {
if self.subviews.count == 0 {
print("Loading Nib")
//let bundle = Bundle(forClass: self.dynamicType)
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: "gcCustomView", bundle: bundle)
let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
view.frame = bounds
view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
addSubview(view)
}
}
}
(c) メイン絵コンテのスナップショット