这可能是我这边的一些误解,但我不明白为什么不能这样做。
我已经创建了一个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 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 = ""
}
}
这样每次你设置图像字符串的值时...它就会刷新你的视图。