2

私は Swift を初めて使用しますが、以前は Objective-C で作業していました。セルが UITableView で再利用されているかどうかのチェックインに問題があります。

    let cell = tableView.dequeueReusableCellWithIdentifier(strCellId, forIndexPath:indexPath) as! MGSwipeTableCell
    cell.backgroundColor = UIColor.clearColor()

    let SMSObj = self.arraySMSContent[indexPath.row] as! SMSModel

    let lblMessage = UILabel(frame: CGRectMake(15, 10, Constants.SCREEN_WIDTH/1.4, Constants.SCREEN_HEIGHT/11))
    lblMessage.text = SMSObj.strSMSContent
    lblMessage.textAlignment = NSTextAlignment.Left
    lblMessage.numberOfLines = 2
    lblMessage.textColor = UIColor.whiteColor()
    cell.contentView.addSubview(lblMessage)

MGSwipebleCell を使用しました。lblMessage のスクロール中にオーバーラップします。cell が nil かどうかを確認することさえできません。では、この状況で viewWithTag を使用するにはどうすればよいでしょうか? タナクス

4

2 に答える 2

4

を使用する代わりviewWithTagに、セル再利用識別子を使用してカスタム クラスを登録できます。次に、そのサブクラスのプロパティを使用してラベルにアクセスできます。

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.registerClass(CustomCell.self, forCellReuseIdentifier: "CustomCell")
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("CustomCell", forIndexPath: indexPath) as! CustomCell

    cell.smsLabel.text = ...

    return cell
}

どこ:

class CustomCell: MGSwipeTableCell {
    var smsLabel: UILabel = {
        let label = UILabel()
        label.translatesAutoresizingMaskIntoConstraints = false
        label.textAlignment = .Left
        label.numberOfLines = 2
        label.textColor = .whiteColor()

        return label
    }()

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        backgroundColor = .blueColor()

        contentView.addSubview(smsLabel)
        NSLayoutConstraint.activateConstraints([
            smsLabel.topAnchor.constraintEqualToAnchor(contentView.topAnchor, constant: 5),
            smsLabel.bottomAnchor.constraintEqualToAnchor(contentView.bottomAnchor, constant: -5),
            smsLabel.leadingAnchor.constraintEqualToAnchor(contentView.leadingAnchor, constant: 5),
            smsLabel.trailingAnchor.constraintEqualToAnchor(contentView.trailingAnchor, constant: -5)
        ])

        leftButtons = [MGSwipeButton(title: "Red", backgroundColor: .redColor())]
        leftSwipeSettings.transition = .Rotate3D;

        rightButtons = [MGSwipeButton(title: "Green", backgroundColor: .greenColor())]
        rightSwipeSettings.transition = .Rotate3D;
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        fatalError("not needed")
    }
}
于 2016-09-16T08:54:16.157 に答える
1

あなたの問題を解決する方法はたくさんあります。してみてください:

if let lblMessage = cell.contentView.viewWithTag(9999) as? UILabel { //Tag
    lblMessage.text = SMSObj.strSMSContent
}else{
    let lblMessage = UILabel(frame: CGRectMake(15, 10, Constants.SCREEN_WIDTH/1.4, Constants.SCREEN_HEIGHT/11))
    lblMessage.text = SMSObj.strSMSContent
    lblMessage.textAlignment = NSTextAlignment.Left
    lblMessage.numberOfLines = 2
    lblMessage.textColor = UIColor.whiteColor()
    lblMessage.tag = 9999 //Tag
    cell.contentView.addSubview(lblMessage)
}
于 2016-09-16T07:59:29.480 に答える