Can't reset UILabel attributedText when a UITableViewCell is reused

前端 未结 2 1072
半阙折子戏
半阙折子戏 2020-12-31 16:48

The problem

I\'m using a UITableView to show the list of transactions of a credit card. If the transaction is a chargeback, I\'m adding a strikethroug

2条回答
  •  余生分开走
    2020-12-31 17:48

    You should try to set with .attributedText here instead of using `.text'. If it won't work I'll delete my answer.

    // Fill in the values
    transactionDescriptionLabel.text = transactionData.description
    transactionValueLabel.text = Formatter.currency.string(for: transactionData.balance)
    

    So, try this

    transactionDescriptionLabel.attributedText = //
    transactionValueLabel.attributedText = //
    

    One more thing. Actually I don't like didSet. I suggest you to create a method to configure your cell. Here is an example of what I want to tell you.

    func configure(with transactionData: TimelineResponseModel) {
       // Reset the labels
       transactionDescriptionLabel.text = nil
       transactionDescriptionLabel.attributedText = nil
       transactionValueLabel.text = nil
       transactionValueLabel.attributedText = nil
    
       // Fill in the values
       transactionDescriptionLabel.text = transactionData.description
       transactionValueLabel.text = Formatter.currency.string(for: transactionData.balance)
    
       if transactionData.isChargeback {
          let value = Formatter.currency.string(for: transactionData.balance) ?? ""
          transactionDescriptionLabel.attributedText = transactionData.description.strikedThrough()
          transactionValueLabel.attributedText = value.strikedThrough()
       }
    }
    

    Next.

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: TimelineTableViewCell.reuseIdentifier,
                                                       for: indexPath) as? TimelineTableViewCell else { fatalError() }
        // Thats what I really like
        cell.configure(with: viewModel.timeline[indexPath.row])
        return cell
    }
    

提交回复
热议问题