// // SettingDateTableViewCell.swift // Earthquake Network // // Created by Busi Andrea on 28/08/2020. // Copyright © 2020 Earthquake Network. All rights reserved. // import Foundation class SettingDateTableViewCell: UITableViewCell { @objc static let Identifier = "DateCell" @objc var isDisabled: Bool = false { didSet { updateUI() } } @objc var isPickerVisible: Bool = false { didSet { if oldValue != isPickerVisible { updateUI() } } } @objc private(set) var date = Date() @objc var valueChanged: ((Date) -> Void)? // MARK: - Properties @objc lazy var titleLabel: UILabel = { let label = UILabel() label.translatesAutoresizingMaskIntoConstraints = false label.numberOfLines = 0 label.font = UIFont.preferredFont(forTextStyle: .body) label.textColor = AppTheme.shared.textColor return label }() @objc lazy var valuesLabel: UILabel = { let label = UILabel() label.translatesAutoresizingMaskIntoConstraints = false label.numberOfLines = 0 label.font = UIFont.preferredFont(forTextStyle: .subheadline) label.textColor = AppTheme.shared.valueColor return label }() @objc lazy var datePicker: UIDatePicker = { let picker = UIDatePicker() picker.translatesAutoresizingMaskIntoConstraints = false picker.datePickerMode = .time picker.date = self.date picker.addTarget(self, action: #selector(datePickerChanged(_:)), for: .valueChanged) return picker }() @objc lazy var stackView: UIStackView = { let stackView = UIStackView() stackView.translatesAutoresizingMaskIntoConstraints = false stackView.axis = .vertical stackView.distribution = .equalSpacing stackView.spacing = 8 return stackView }() // MARK: - Init override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) setupUI() } required init?(coder: NSCoder) { super.init(coder: coder) setupUI() } // MARK: - Public @objc public func updateDate(_ date: Date) { self.date = date datePicker.setDate(date, animated: true) } // MARK: - Private private func setupUI() { stackView.addArrangedSubview(titleLabel) stackView.addArrangedSubview(valuesLabel) contentView.addSubview(stackView) stackView.topAnchor.constraint(equalTo: contentView.layoutMarginsGuide.topAnchor).isActive = true stackView.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor).isActive = true stackView.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor).isActive = true stackView.bottomAnchor.constraint(equalTo: contentView.layoutMarginsGuide.bottomAnchor).isActive = true } private func updateUI() { let theme = AppTheme.shared titleLabel.textColor = isDisabled ? theme.textDisabledColor : theme.textColor valuesLabel.textColor = isDisabled ? theme.textDisabledColor : theme.textColor if isPickerVisible && !stackView.arrangedSubviews.contains(datePicker) { stackView.addArrangedSubview(datePicker) } else if !isPickerVisible && stackView.arrangedSubviews.contains(datePicker) { stackView.removeArrangedSubview(datePicker) } } // MARK: - Actions @objc func datePickerChanged(_ sender: UIDatePicker) { date = sender.date valueChanged?(sender.date) } }