带有 IBDesignable UIView 的自定义 UIView 未显示在应用程序中

问题描述

我正在尝试使用这种样式创建一个 UIView

enter image description here

我使用 @IBDesignable 类制作圆圈,使用 this answer 中的代码

import UIKit

@IBDesignable
class CircleView: UIView {
    private var shapeLayer = CAShapeLayer()
    @IBInspectable var fillColor: UIColor = .blue {
        didSet {
            shapeLayer.fillColor = fillColor.cgColor
        }
    }

    override init(frame: CGRect = .zero) {
        super.init(frame: frame)

        configure()
    }

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

        configure()
    }

    private func configure() {
        shapeLayer.fillColor = fillColor.cgColor
        layer.addSublayer(shapeLayer)
    }

    override func layoutSubviews() {
        super.layoutSubviews()

        shapeLayer.path = UIBezierPath(ovalIn: bounds).cgPath
    }
}

所以,当我在那个 xib 上时,我制作了另一个 UIView,我们称之为 DotsView,它包含顶部的 UILabel 和水平的 UIStackView文件,圆圈显示正确。

然后在我的 UIStoryboard 中,我有一个 UIViewController,我在其中放置我的自定义 UIView (DotsView),并将它的类设置为它,在两个 xib 上DotsView 以及故事板,如下所示:

enter image description here

虽然我知道,这些点不会出现在故事​​板上,因为它们被“包裹”在我的 DotsView 中,它们应该在运行时出现在我的模拟器上,但事实并非如此。

为了显示这个自定义视图,我是否遗漏了什么?

这是 DotsView 类,未删除任何内容

import UIKit

class DotsView: UIView {
    @IBOutlet var contentView: UIView!
    @IBOutlet weak var titleLabel: UILabel!
    
    @IBOutlet weak var firstDigitDot: CircleView!
    @IBOutlet weak var secondDigitDot: CircleView!
    @IBOutlet weak var thirdDigitDot: CircleView!
    @IBOutlet weak var fourthDigitDot: CircleView!
    
    //initWithFrame to init view from code
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupView()
    }
      
    //initWithCode to init view from xib or storyboard
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setupView()
    }
      
    //common func to init our view
    private func setupView() {
        Bundle.main.loadNibNamed("DotsView",owner: self,options: nil)
        addSubview(contentView)
        contentView.frame = self.bounds
        contentView.autoresizingMask = [.flexibleHeight,.flexibleWidth]
    }
}

我根据此 tutorialDotsView 编辑了上述代码

但是现在,应用程序崩溃了:

Terminating app due to uncaught exception 'NSUnkNownKeyException',reason: '[<NSObject 0x600003120ca0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key contentView.'
terminating with uncaught exception of type NSException

我已将文件的所有者设置为 DotsView,但我不确定为什么现在会发生这种情况

我的 xib 的文件名也是 DotsView.xib

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)