12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- import Foundation
- import UIKit
- import DcCore
- class ChatListCell: UITableViewCell {
- let badgeSize: CGFloat = 54
- lazy var avatar: InitialsBadge = {
- let badge = InitialsBadge(size: badgeSize)
- badge.setColor(UIColor.lightGray)
- badge.isAccessibilityElement = false
- return badge
- }()
- let titleLabel: UILabel = {
- let label = UILabel()
- label.font = UIFont.systemFont(ofSize: 16, weight: .medium)
- label.lineBreakMode = .byTruncatingTail
- label.textColor = DcColors.defaultTextColor
- label.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 1), for: NSLayoutConstraint.Axis.horizontal)
- label.translatesAutoresizingMaskIntoConstraints = false
- return label
- }()
- override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
- super.init(style: style, reuseIdentifier: reuseIdentifier)
- selectionStyle = .none
- backgroundColor = DcColors.contactCellBackgroundColor
- contentView.backgroundColor = DcColors.contactCellBackgroundColor
- setupSubviews()
- }
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
- private func setupSubviews() {
- let margin: CGFloat = 10
- avatar.translatesAutoresizingMaskIntoConstraints = false
- contentView.addSubview(avatar)
- contentView.addConstraints([
- avatar.constraintWidthTo(badgeSize),
- avatar.constraintHeightTo(badgeSize),
- avatar.constraintAlignLeadingTo(contentView, paddingLeading: badgeSize / 4),
- avatar.constraintCenterYTo(contentView),
- ])
- contentView.addSubview(titleLabel)
- contentView.addConstraints([
- titleLabel.constraintCenterYTo(contentView),
- titleLabel.constraintToTrailingOf(avatar, paddingLeading: margin),
- titleLabel.constraintAlignTrailingTo(contentView)
- ])
- }
- private func setImage(_ img: UIImage) {
- avatar.setImage(img)
- }
- private func resetBackupImage() {
- avatar.setColor(UIColor.clear)
- avatar.setName("")
- }
- private func setBackupImage(name: String, color: UIColor) {
- avatar.setColor(color)
- avatar.setName(name)
- }
- private func setColor(_ color: UIColor) {
- avatar.setColor(color)
- }
- // use this update-method to update cell in cellForRowAt whenever it is possible - other set-methods will be set private in progress
- func updateCell(chatId: Int) {
- let chat = DcContext.shared.getChat(chatId: chatId)
- titleLabel.text = chat.name
- backgroundColor = DcColors.contactCellBackgroundColor
- contentView.backgroundColor = DcColors.contactCellBackgroundColor
- if let img = chat.profileImage {
- resetBackupImage()
- setImage(img)
- } else {
- setBackupImage(name: chat.name, color: chat.color)
- }
- }
- }
|