-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
TextViewElementCell.swift
73 lines (57 loc) · 1.66 KB
/
TextViewElementCell.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import KsApi
import Library
import Prelude
import Prelude_UIKit
import UIKit
class TextViewElementCell: UITableViewCell, ValueCell {
// MARK: Properties
private lazy var textView: UITextView = { UITextView(frame: .zero) }()
private let viewModel = TextViewElementCellViewModel()
// MARK: Initializers
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.configureViews()
self.bindStyles()
self.bindViewModel()
}
required init?(coder _: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func configureWith(value textElement: TextViewElement) {
self.viewModel.inputs.configureWith(textElement: textElement)
}
// MARK: View Model
internal override func bindViewModel() {
self.viewModel.outputs.attributedText
.observeForUI()
.observeValues { [weak self] attributedText in
self?.textView.attributedText = attributedText
}
}
// MARK: View Styles
internal override func bindStyles() {
super.bindStyles()
_ = self
|> baseTableViewCellStyle()
|> \.separatorInset .~
.init(
top: 0,
left: 0,
bottom: 0,
right: self.bounds.size.width + ProjectHeaderCellStyles.Layout.insets
)
_ = self.contentView
|> \.layoutMargins .~ .init(
topBottom: Styles.gridHalf(3),
leftRight: Styles.grid(3)
)
_ = self.textView
|> textViewStyle
}
// MARK: Helpers
private func configureViews() {
_ = (self.textView, self.contentView)
|> ksr_addSubviewToParent()
|> ksr_constrainViewToMarginsInParent()
}
}