Я пытаюсь создать подкласс UIStackView и добавить некоторые элементы управления, которые мне нужны. Я добавляю UIView в качестве контейнера, и все другие представления, такие как UILabel, UIButton, UIImageView и т. Д., Будут добавлены в контейнер как подпредставление.
class UIButtonHeaderView: UIStackView {
// MARK: - Properties
var container: UIView!
var titleLabel: UILabel!
// MARK: - Initialization
private func setUp() {
// Set container.
container = UIView()
container.backgroundColor = .blue
addArrangedSubview(container)
// Set label.
titleLabel = UILabel()
container.addSubview(titleLabel)
titleLabel.translatesAutoresizingMaskIntoConstraints = false
titleLabel.leadingAnchor.constraint(equalTo: container.leadingAnchor).isActive = true
titleLabel.bottomAnchor.constraint(equalTo: container.bottomAnchor).isActive = true
titleLabel.trailingAnchor.constraint(lessThanOrEqualTo: container.trailingAnchor).isActive = true
titleLabel.widthAnchor.constraint(greaterThanOrEqualToConstant: 0).isActive = true
titleLabel.heightAnchor.constraint(greaterThanOrEqualToConstant: 0).isActive = true
titleLabel.text = "This is just a simple test!!"
titleLabel.backgroundColor = .green
titleLabel.textColor = .red
titleLabel.sizeToFit()
}
override init(frame: CGRect) {
super.init(frame: frame)
setUp()
}
required init(coder: NSCoder) {
super.init(coder: coder)
setUp()
}
}
Код работает нормально, но у меня проблема при замене
var container: UIView!
var titleLabel: UILabel!
с
weak var container: UIView!
weak var titleLabel: UILabel!
Я думаю, что экземпляр класса UIButtonHeaderView и его свойство (container и titleLabel) могут иметь проблему с ссылочным циклом, поэтому я пытаюсь добавить слабый перед var, что вызывает сбой моего приложения.
Xcode сказал мне, что эта строка
container.backgroundColor = .blue
произошла ошибка с сообщением об ошибке
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
Кажется, что линия
container = UIView()
не удалось создать экземпляр класса UIView, поэтому контейнер имеет значение nil, что приводит к падению приложения, но я не знаю причину.