mastodon-ios/Mastodon/Scene/Settings/View/Cell/SettingsToggleTableViewCell...

72 lines
1.8 KiB
Swift
Raw Normal View History

2021-04-08 13:47:31 +02:00
//
// SettingsToggleTableViewCell.swift
// Mastodon
//
// Created by ihugo on 2021/4/8.
//
import UIKit
import Combine
2021-04-08 13:47:31 +02:00
protocol SettingsToggleCellDelegate: AnyObject {
func settingsToggleCell(_ cell: SettingsToggleTableViewCell, switchValueDidChange switch: UISwitch)
2021-04-08 13:47:31 +02:00
}
class SettingsToggleTableViewCell: UITableViewCell {
var disposeBag = Set<AnyCancellable>()
private(set) lazy var switchButton: UISwitch = {
2021-04-08 13:47:31 +02:00
let view = UISwitch(frame:.zero)
return view
}()
weak var delegate: SettingsToggleCellDelegate?
2021-07-22 07:47:56 +02:00
override func prepareForReuse() {
super.prepareForReuse()
disposeBag.removeAll()
}
2021-04-08 13:47:31 +02:00
// MARK: - Methods
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: .default, reuseIdentifier: reuseIdentifier)
setupUI()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setupUI()
2021-04-08 13:47:31 +02:00
}
// MARK: Private methods
private func setupUI() {
selectionStyle = .none
2021-04-13 10:22:41 +02:00
accessoryView = switchButton
2021-04-08 13:47:31 +02:00
switchButton.addTarget(self, action: #selector(switchValueDidChange(sender:)), for: .valueChanged)
}
}
// MARK: - Actions
extension SettingsToggleTableViewCell {
@objc private func switchValueDidChange(sender: UISwitch) {
guard let delegate = delegate else { return }
delegate.settingsToggleCell(self, switchValueDidChange: sender)
2021-04-08 13:47:31 +02:00
}
}
extension SettingsToggleTableViewCell {
func update(enabled: Bool?) {
switchButton.isEnabled = enabled != nil
textLabel?.textColor = enabled != nil ? Asset.Colors.Label.primary.color : Asset.Colors.Label.secondary.color
switchButton.isOn = enabled ?? false
2021-04-08 13:47:31 +02:00
}
2021-04-08 13:47:31 +02:00
}