问题描述
我正在尝试使用这种样式创建一个 UIView
:
我使用 @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
以及故事板,如下所示:
虽然我知道,这些点不会出现在故事板上,因为它们被“包裹”在我的 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]
}
}
我根据此 tutorial 为 DotsView
编辑了上述代码。
但是现在,应用程序崩溃了:
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 (将#修改为@)