仅在某些行上添加标签到单元格

时间:2014-07-31 09:00:09

标签: ios swift uitableview cocoa-touch uilabel

我有很多行有几个不同的布局 - 一切正常。现在我想在一些行上添加自定义UILabel。我知道有一个"问题"使用重用标识符,UITableView将尝试再次在下一个单元格上重用UILabel。为了防止这种情况发生,我在这里检查了很多建议并尝试了这种方式:

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell? {

    var cell = tableView .dequeueReusableCellWithIdentifier(myQuestions.getQuestion(indexPath.row).qTemplate, forIndexPath: indexPath) as CustomTableViewCell

    // if there is a saved Notice, add this to this Cell

    if(myQuestions.getQuestion(indexPath.row).qNotice != nil) {

        cell.addNoticeToCell("This is a Test")

    }

    return cell

}

我的CustomTableViewCell课程是:

class CustomTableViewCell: UITableViewCell {

    @IBOutlet var LabelCellTitle: UILabel!

    @IBOutlet var TextView: UITextView!

    @IBOutlet weak var LabelCellContent: UILabel!

    var noticeButton:UIButton!

    func addNoticeToCell(noticeText: String) {

        noticeButton = UIButton.buttonWithType(UIButtonType.System) as UIButton
        noticeButton.frame = CGRectMake(330,44,600,44)
        noticeButton.titleLabel.textColor = UIColor.blueColor()
        noticeButton.tag = 100
        noticeButton.setTitle(noticeText, forState: UIControlState.Normal)

        self.contentView.addSubview(noticeButton)

    }

    override func prepareForReuse() {

             println("CELL BEFORE REUSE")

             if(self.contentView.subviews.count > 0) {
                 for mySubView in self.contentView.subviews {

                     if mySubView.tag == 100 {

                         mySubView.removeFromSuperview()

                      ....

它现在按预期工作 - 但我不知道通过所有子视图是否是一个好主意。有没有更好的办法?我也会在某些单元格上添加2-3 UIImageView,并使用相同的程序创建它。

1 个答案:

答案 0 :(得分:2)

prepareForReuse()中,为什么不使用您添加到单元格类中的属性来删除它,而不是枚举所有子视图,如下所示:

var noticeButton:UIButton?

override func prepareForReuse() {
    super.prepareForReuse()
    if let notice = self.noticeButton {
        notice.removeFromSuperview()
        self.notice = nil
    }
}