@IBDesignable UIView未在情节提要中调用init

ale*_*wis 1 ios uistoryboard uibackgroundcolor swift ibdesignable

我有一个UIView@IBDesignable

@IBDesignable
class MyView: UIView {

    override init(frame: CGRect) {
        super.init(frame: frame)
        sharedInit()
    }

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

    private func sharedInit(){
        translatesAutoresizingMaskIntoConstraints = false
        backgroundColor = .blue
    }

}
Run Code Online (Sandbox Code Playgroud)

当我将其放置UIView在情节提要中并MyView在“ 身份”检查器中将其类分配给时,UIView仍然具有默认的背景色。为什么其背景颜色不在UIColor.blue情节提要中?而且,请问我该怎么做呢?

谢谢你的帮助。

moh*_*kan 8

我建议您在创建@IBDesignable类时要做很多事情:

  1. 创建@IBDesignable类
  2. 创建@IBInspectable属性,因此您可以从storyBoard更改属性
  3. willSet该属性中设置要更改的更改,该更改是更改的观察者
  4. 在prepare类中进行其他设置(从Super类覆盖) UIView

简单容易!

您的代码应如下所示:

迅捷5:

import UIKit

@IBDesignable
class myView: UIView {

  @IBInspectable  var storyBoardColor : UIColor = .red {         
    willSet(newValue) {
      self.backgroundColor = newValue
    }
   }

  fileprivate func sharedInit(){
    translatesAutoresizingMaskIntoConstraints = false
    backgroundColor = storyBoardColor
  }

  override func prepareForInterfaceBuilder() {
    super.prepareForInterfaceBuilder()
    sharedInit()
  }
}
Run Code Online (Sandbox Code Playgroud)

myView的storyBoardColor的初始值为红色,您可以从storyBoard更改它;)

在此处输入图片说明