IBDesignable UIView で使用する場合、MDCRaised の背景色の設定に問題があります。私のログから、viewWillAppear と viewDidAppear の間で色が変化しているようです。
カスタム ビュー SubmitButton には、MDCRaisedButton と、その backgroundColor および titleLabel.text の 2 つの検査可能なプロパティが含まれています。ストーリーボードでこれらに加えた変更は問題ないように見えます。デバイスでアプリを実行すると、テキストが更新され、色が常に青色に戻ります。
私のSubmitButtonのコードは -
import UIKit
import MaterialComponents
@IBDesignable
class SubmitButton: UIView {
public var view:UIView!
@IBOutlet weak var button: MDCRaisedButton!
@IBInspectable dynamic var buttonText:String = "Submit button text" {
didSet {
button.setTitle(buttonText, for: .normal)
button.setTitle(buttonText, for: .highlighted)
}
}
@IBInspectable dynamic var buttonColour:UIColor? {
didSet {
button.setBackgroundColor(buttonColour, for: .normal)
print("Did set button colour = \(button.backgroundColor!)")
// Prints - Did set button colour = UIExtendedGrayColorSpace 0 1
button.setBackgroundColor(buttonColour, for: .normal)
button.setBackgroundColor(buttonColour, for: .highlighted)
}
}
public override init(frame: CGRect) {
super.init(frame: frame)
nibSetup()
styleDisplay()
}
public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
nibSetup()
styleDisplay()
}
public func nibSetup() {
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.translatesAutoresizingMaskIntoConstraints = true
addSubview(view)
}
public func loadViewFromNib() -> UIView {
let aClass: AnyClass = self.classForCoder
if aClass == SubmitButton.classForCoder() {
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: String(describing: type(of: self)), bundle: bundle)
let nibView = nib.instantiate(withOwner: self, options: nil).first as! UIView
return nibView
}
let bundle = Bundle(for: type(of: SubmitButton()))
let nib = UINib(nibName: String(describing: type(of: SubmitButton())), bundle: bundle)
let nibView = nib.instantiate(withOwner: self, options: nil).first as! UIView
return nibView
}
func styleDisplay() {
self.backgroundColor = .clear
//Set any other UI code here.
}
}
ログからの結果を含むViewControllerのコードは-
import MaterialComponents
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var raiseButton: MDCRaisedButton!
@IBOutlet weak var submitButton: SubmitButton!
override func viewDidLoad() {
super.viewDidLoad()
print("Colour at viewDidLoad \(String(describing: submitButton.button.backgroundColor!))")
//prints - Colour at viewDidLoad UIExtendedGrayColorSpace 0 1
}
override func viewWillAppear(_ animated: Bool) {
print("Colour at viewWillAppear \(String(describing: submitButton.button.backgroundColor!))")
//prints - Colour at viewWillAppear UIExtendedGrayColorSpace 0 1
}
override func viewDidAppear(_ animated: Bool) {
print("Colour at viewDidAppear \(String(describing: submitButton.button.backgroundColor!))")
//prints - Colour at viewDidAppear UIExtendedSRGBColorSpace 0.129412 0.588235 0.952941 1 - The blue color
}
}
これで、ビューのボタンの backgroundColor を設定することで間違いなく問題を解決できますが、これは、ストーリーボードで色を設定するだけで手動で配置する必要がない場合に、色が青に変わる理由を説明していませんこのカスタム UIView を使用するたびにコードを追加します。私は何を間違っていますか?どうすればこれを修正できますか?