Newer
Older
import Combine
final class AvatarCellButton: UIControl {
let titleLabel = UILabel()
let imageView = UIImageView()
init() {
super.init(frame: .zero)
titleLabel.numberOfLines = 0
titleLabel.textAlignment = .right
titleLabel.font = Fonts.Mulish.semiBold.font(size: 13.0)
addSubview(imageView)
addSubview(titleLabel)
imageView.snp.makeConstraints {
$0.top.greaterThanOrEqualToSuperview()
$0.left.equalToSuperview()
$0.centerY.equalToSuperview()
$0.bottom.lessThanOrEqualToSuperview()
}
titleLabel.snp.makeConstraints {
$0.top.greaterThanOrEqualToSuperview()
$0.left.equalTo(imageView.snp.right).offset(5)
$0.centerY.equalToSuperview()
$0.right.equalToSuperview()
$0.width.equalTo(60)
$0.bottom.lessThanOrEqualToSuperview()
}
}
required init?(coder: NSCoder) { nil }
}
public final class AvatarCell: UITableViewCell {
let h1Label = UILabel()
let h2Label = UILabel()
let h3Label = UILabel()
let h4Label = UILabel()
let separatorView = UIView()
let avatarView = AvatarView()
let stackView = UIStackView()
let stateButton = AvatarCellButton()
var cancellables = Set<AnyCancellable>()
public var didTapStateButton: (() -> Void)!
public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
selectedBackgroundView = UIView()
multipleSelectionBackgroundView = UIView()
backgroundColor = Asset.neutralWhite.color
h1Label.textColor = Asset.neutralActive.color
h2Label.textColor = Asset.neutralSecondaryAlternative.color
h3Label.textColor = Asset.neutralSecondaryAlternative.color
h4Label.textColor = Asset.neutralSecondaryAlternative.color
h1Label.font = Fonts.Mulish.semiBold.font(size: 14.0)
h2Label.font = Fonts.Mulish.regular.font(size: 14.0)
h3Label.font = Fonts.Mulish.regular.font(size: 14.0)
h4Label.font = Fonts.Mulish.regular.font(size: 14.0)
stackView.spacing = 4
stackView.axis = .vertical
stackView.addArrangedSubview(h1Label)
stackView.addArrangedSubview(h2Label)
stackView.addArrangedSubview(h3Label)
stackView.addArrangedSubview(h4Label)
separatorView.backgroundColor = Asset.neutralLine.color
contentView.addSubview(stackView)
contentView.addSubview(avatarView)
contentView.addSubview(stateButton)
contentView.addSubview(separatorView)
setupConstraints()
}
required init?(coder: NSCoder) { nil }
public override func prepareForReuse() {
super.prepareForReuse()
h1Label.text = nil
h2Label.text = nil
h3Label.text = nil
h4Label.text = nil
stateButton.imageView.image = nil
stateButton.titleLabel.text = nil
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
}
public func setup(
title: String,
image: Data?,
firstSubtitle: String? = nil,
secondSubtitle: String? = nil,
thirdSubtitle: String? = nil,
showSeparator: Bool = true
) {
h1Label.text = title
if let firstSubtitle = firstSubtitle {
h2Label.isHidden = false
h2Label.text = firstSubtitle
} else {
h2Label.isHidden = true
}
if let secondSubtitle = secondSubtitle {
h3Label.isHidden = false
h3Label.text = secondSubtitle
} else {
h3Label.isHidden = true
}
if let thirdSubtitle = thirdSubtitle {
h4Label.isHidden = false
h4Label.text = thirdSubtitle
} else {
h4Label.isHidden = true
}
avatarView.setupProfile(title: title, image: image, size: .medium)
separatorView.alpha = showSeparator ? 1.0 : 0.0
}
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
public func setupForRequestSent(resent: Bool) {
cancellables.removeAll()
var buttonTitle: String? = nil
var buttonImage: UIImage? = nil
var buttonTitleColor: UIColor? = nil
if resent {
buttonTitle = Localized.Requests.Cell.resent
buttonImage = Asset.requestsResent.image
buttonTitleColor = Asset.neutralWeak.color
} else {
buttonTitle = Localized.Requests.Cell.requested
buttonImage = Asset.requestsResend.image
buttonTitleColor = Asset.brandPrimary.color
}
setupStateButton(
image: buttonImage,
title: buttonTitle,
color: buttonTitleColor
)
}
private func setupStateButton(
image: UIImage?,
title: String?,
color: UIColor?
) {
stateButton.imageView.image = image
stateButton.titleLabel.text = title
stateButton.titleLabel.textColor = color
stateButton
.publisher(for: .touchUpInside)
.sink { [unowned self] in didTapStateButton() }
.store(in: &cancellables)
}
private func setupConstraints() {
avatarView.snp.makeConstraints {
$0.width.height.equalTo(36)
$0.left.equalToSuperview().offset(27)
$0.centerY.equalToSuperview()
}
stackView.snp.makeConstraints {
$0.top.equalTo(avatarView)
$0.left.equalTo(avatarView.snp.right).offset(14)
$0.right.lessThanOrEqualToSuperview().offset(-10)
$0.bottom.greaterThanOrEqualTo(avatarView)
$0.bottom.lessThanOrEqualToSuperview()
}
separatorView.snp.makeConstraints {
$0.height.equalTo(1)
$0.top.greaterThanOrEqualTo(stackView.snp.bottom).offset(10)
$0.left.equalToSuperview().offset(25)
$0.right.equalToSuperview()
$0.bottom.equalToSuperview()
}
stateButton.snp.makeConstraints {
$0.centerY.equalTo(stackView)
$0.right.equalToSuperview().offset(-24)
}