为什么我不能直接设置某些 class 属性?
Why can't I set some class properties directly?
这可能是我的一些误解,但我不明白为什么这不起作用。
我创建了一个 UITableViewCell 子类,如下所示:
class MenuCell: UITableViewCell {
var mcImage: String
var mcLabel: String
init(mcImage: String, mcLabel: String) {
self.mcImage = mcImage
self.mcLabel = mcLabel
super.init(style: .default, reuseIdentifier: "reuseIdentifier")
setupView()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupView() {
let mcImageView = UIImageView()
let mcLabelView = UILabel()
mcImageView.image = UIImage(systemName: mcImage)
mcLabelView.text = mcLabel
// Rest of setup (font, colors, positions...)
addSubview(mcImageView)
addSubview(mcLabelView)
}}
如果在我的 ViewController 我写:
var firstCell = MenuCell(mcImage: "plus.circle", mcLabel: "Some text")
它创建了对象并完美运行,我可以访问我的对象属性,但为什么我不能像这样设置 属性:
firstCell.mcImage = "plus.circle" // This doesn't work
它只是忽略我,但是我可以设置任何 UITableViewCell 属性:
firstCell.accessoryType = .none // This works
嗯,它会将 mcImage
的值设置为 "plus.circle",但您看不到影响...因为您没有在为其赋值后调用 setupView()
...在 setupView()
函数中,您使用此值创建带有此图像的 imageView
您可以像这样编辑您的 class
class MenuCell: UITableViewCell {
private let mcImageView = UIImageView()
private let mcLabelView = UILabel()
var mcImage: String {
didSet{
self.mcImageView.image = UIImage(systemName: mcImage)
}
}
var mcLabel: String {
didSet{
self.mcLabelView.text = mcLabel
}
}
init(mcImage: String, mcLabel: String) {
self.mcImage = mcImage
self.mcLabel = mcLabel
super.init(style: .default, reuseIdentifier: "reuseIdentifier")
addSubview(mcImageView)
addSubview(mcLabelView)
setupView()
}
func setupView() {
// Rest of setup (font, colors, positions...)
}
override func prepareForReuse() {
super.prepareForReuse()
mcImageView.image = nil
mcLabelView.text = ""
}
}
这样每次你设置图像字符串的值...它都会刷新你的视图
这可能是我的一些误解,但我不明白为什么这不起作用。
我创建了一个 UITableViewCell 子类,如下所示:
class MenuCell: UITableViewCell {
var mcImage: String
var mcLabel: String
init(mcImage: String, mcLabel: String) {
self.mcImage = mcImage
self.mcLabel = mcLabel
super.init(style: .default, reuseIdentifier: "reuseIdentifier")
setupView()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupView() {
let mcImageView = UIImageView()
let mcLabelView = UILabel()
mcImageView.image = UIImage(systemName: mcImage)
mcLabelView.text = mcLabel
// Rest of setup (font, colors, positions...)
addSubview(mcImageView)
addSubview(mcLabelView)
}}
如果在我的 ViewController 我写:
var firstCell = MenuCell(mcImage: "plus.circle", mcLabel: "Some text")
它创建了对象并完美运行,我可以访问我的对象属性,但为什么我不能像这样设置 属性:
firstCell.mcImage = "plus.circle" // This doesn't work
它只是忽略我,但是我可以设置任何 UITableViewCell 属性:
firstCell.accessoryType = .none // This works
嗯,它会将 mcImage
的值设置为 "plus.circle",但您看不到影响...因为您没有在为其赋值后调用 setupView()
...在 setupView()
函数中,您使用此值创建带有此图像的 imageView
您可以像这样编辑您的 class
class MenuCell: UITableViewCell {
private let mcImageView = UIImageView()
private let mcLabelView = UILabel()
var mcImage: String {
didSet{
self.mcImageView.image = UIImage(systemName: mcImage)
}
}
var mcLabel: String {
didSet{
self.mcLabelView.text = mcLabel
}
}
init(mcImage: String, mcLabel: String) {
self.mcImage = mcImage
self.mcLabel = mcLabel
super.init(style: .default, reuseIdentifier: "reuseIdentifier")
addSubview(mcImageView)
addSubview(mcLabelView)
setupView()
}
func setupView() {
// Rest of setup (font, colors, positions...)
}
override func prepareForReuse() {
super.prepareForReuse()
mcImageView.image = nil
mcLabelView.text = ""
}
}
这样每次你设置图像字符串的值...它都会刷新你的视图