使用扩展创建出口在UITableViewCell中表现怪异

时间:2018-12-26 05:53:23

标签: ios swift uitableview iboutlet swift-extensions

当我使用扩展程序创建插座时,这是我的单元格类。并使用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
    }
}

**使用扩展名创建插座不是很好吗??? **以及为何如此奇怪。如果有人可以解释这一点,那将是很棒的。希望您对此有所了解。谢谢大家,加油!和快乐迟到的圣诞节。

1 个答案:

答案 0 :(得分:0)

这是因为在第二个代码中,每次创建单元格时都会在此处为每个单元格创建新标签

 let buttonLabel: UILabel = {
    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.textAlignment = .center
    return label
}()

在扩展代码中,您仅创建一次并将其分配给单元格,而UILable是引用类型,则您的行为很奇怪

在此行:private var myLabel: UILabel = UILabel()