0

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 を使用するたびにコードを追加します。私は何を間違っていますか?どうすればこれを修正できますか?

4

0 に答える 0