Antidote/Antidote/StaticTableInfoCell.swift

124 lines
3.6 KiB
Swift

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
import UIKit
import SnapKit
private struct Constants {
static let ValueToArrowOffset = 6.0
}
class StaticTableInfoCell: StaticTableBaseCell {
fileprivate var valueChangedHandler: ((Bool) -> Void)?
fileprivate var titleLabel: UILabel!
fileprivate var valueLabel: UILabel!
fileprivate var arrowImageView: UIImageView!
fileprivate var valueLabelToContentRightConstraint: Constraint!
fileprivate var valueLabelToArrowConstraint: Constraint!
override func setupWithTheme(_ theme: Theme, model: BaseCellModel) {
super.setupWithTheme(theme, model: model)
guard let infoModel = model as? StaticTableInfoCellModel else {
assert(false, "Wrong model \(model) passed to cell \(self)")
return
}
titleLabel.textColor = theme.colorForType(.NormalText)
titleLabel.text = infoModel.title
valueLabel.textColor = theme.colorForType(.LinkText)
valueLabel.text = infoModel.value
if infoModel.showArrow {
arrowImageView.isHidden = false
valueLabelToContentRightConstraint.deactivate()
valueLabelToArrowConstraint.activate()
selectionStyle = .default
}
else {
arrowImageView.isHidden = true
valueLabelToArrowConstraint.deactivate()
valueLabelToContentRightConstraint.activate()
selectionStyle = .none
}
}
override func createViews() {
super.createViews()
titleLabel = UILabel()
titleLabel.backgroundColor = UIColor.clear
customContentView.addSubview(titleLabel)
valueLabel = UILabel()
valueLabel.backgroundColor = UIColor.clear
customContentView.addSubview(valueLabel)
arrowImageView = UIImageView()
arrowImageView.image = UIImage(named: "right-arrow")!.flippedToCorrectLayout()
customContentView.addSubview(arrowImageView)
}
override func installConstraints() {
super.installConstraints()
titleLabel.snp.makeConstraints {
$0.centerY.equalTo(customContentView)
$0.leading.equalTo(customContentView)
}
valueLabel.snp.makeConstraints {
$0.centerY.equalTo(customContentView)
$0.leading.greaterThanOrEqualTo(titleLabel.snp.trailing)
valueLabelToContentRightConstraint = $0.trailing.equalTo(customContentView).constraint
}
valueLabelToContentRightConstraint.deactivate()
arrowImageView.snp.makeConstraints {
$0.centerY.equalTo(customContentView)
$0.trailing.equalTo(customContentView)
valueLabelToArrowConstraint = $0.leading.greaterThanOrEqualTo(valueLabel.snp.trailing).offset(Constants.ValueToArrowOffset).constraint
}
valueLabelToArrowConstraint.deactivate()
}
}
// Accessibility
extension StaticTableInfoCell {
override var isAccessibilityElement: Bool {
get {
return true
}
set {}
}
override var accessibilityLabel: String? {
get {
return titleLabel.text
}
set {}
}
override var accessibilityValue: String? {
get {
return valueLabel.text
}
set {}
}
override var accessibilityTraits: UIAccessibilityTraits {
get {
return arrowImageView.isHidden ? UIAccessibilityTraitStaticText : UIAccessibilityTraitButton
}
set {}
}
}