当我使用扩展程序创建插座时,这是我的单元格类。并使用didSet方法通过检查行索引来设置值。当我滚动时,值以奇怪的方式改变。
livy
然后,如果我在不使用扩展程序的情况下创建插座,则它可以正常工作。它不会重复值,并且不会产生异常行为。下面是我的代码。
import UIKit
class MyLabelCell: BaseTableViewCell {
override func setcellUI() {
setbuttonUI()
}
var rowIndex: Int! {
didSet {
switch rowIndex {
case 2:
myLabel.text = "2222"
case 9:
myLabel.text = "9999"
default:
myLabel.text = "0000"
}
}
}
}
private var myLabel: UILabel = UILabel()
extension MyLabelCell {
fileprivate func setbuttonUI() {
let fontScaller = deviceWidth/375
myLabel = UILabel()
myLabel.translatesAutoresizingMaskIntoConstraints = false
myLabel.textAlignment = .center
myLabel.font = UIFont(name: "Helvetica-Light", size: 15 * fontScaller)
myLabel.minimumScaleFactor = 0.2
myLabel.adjustsFontSizeToFitWidth = true
myLabel.text = "BUTTON"
addSubview(myLabel)
let buttonLeft = deviceWidth/25
let buttonRight = -deviceWidth/25
let buttonHeight = deviceHeight/14.82
let buttonlabelConstraints = [myLabel.leftAnchor.constraint(equalTo: leftAnchor, constant: buttonLeft),
myLabel.rightAnchor.constraint(equalTo: rightAnchor, constant: buttonRight),
myLabel.centerYAnchor.constraint(equalTo: centerYAnchor),
myLabel.heightAnchor.constraint(equalToConstant: buttonHeight)]
NSLayoutConstraint.activate(buttonlabelConstraints)
myLabel.layer.masksToBounds = false
myLabel.layer.cornerRadius = 5
myLabel.clipsToBounds = true
}
}
**使用扩展名创建插座不是很好吗??? **以及为何如此奇怪。如果有人可以解释这一点,那将是很棒的。希望您对此有所了解。谢谢大家,加油!和快乐迟到的圣诞节。
答案 0 :(得分:0)
这是因为在第二个代码中,每次创建单元格时都会在此处为每个单元格创建新标签
let buttonLabel: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.textAlignment = .center
return label
}()
在扩展代码中,您仅创建一次并将其分配给单元格,而UILable是引用类型,则您的行为很奇怪
在此行:private var myLabel: UILabel = UILabel()