/
sberpay
/
AgeGate-iOS
Обзор
Документация
Войти
/
sberpay
/
AgeGate-iOS
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
develop
AgeGateExample/Presentation/CartVC/CartVC.swift
118 строк
4 KB
SergeyGladkiy
[0.2.0] БДСЧ сценарий
30 июл 2026, 21:57
30 июл 2026, 21:57
cbcdfcb
Код
Авторство
О чём код?
// // CartVC.swift // AgeGateExample // // Created by Гладкий Сергей Игоревич on 23.07.2026. // import UIKit protocol CartVCProtocol: AnyObject { func reload() func updateTotal() func showResult(title: String, message: String?) } final class CartVC: UIViewController, CartVCProtocol { private let presenter: CartPresenterProtocol private lazy var tableView: UITableView = { let view = UITableView(frame: .zero, style: .plain) view.register(CartCell.self, forCellReuseIdentifier: String(describing: CartCell.self)) view.dataSource = self view.separatorStyle = .none view.translatesAutoresizingMaskIntoConstraints = false return view }() private lazy var hintLabel: UILabel = { let view = UILabel() view.text = "Для покупки товаров с отметкой 18+ потребуется биометрия" view.font = .systemFont(ofSize: 12) view.textColor = .secondaryLabel view.numberOfLines = 0 view.translatesAutoresizingMaskIntoConstraints = false return view }() private lazy var payButton = ActionButton() init(presenter: CartPresenterProtocol) { self.presenter = presenter super.init(nibName: nil, bundle: nil) } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func viewDidLoad() { super.viewDidLoad() title = "Корзина" view.backgroundColor = .systemBackground setupUI() updateTotal() } private func setupUI() { view.addSubview(tableView) view.addSubview(hintLabel) view.addSubview(payButton) NSLayoutConstraint.activate([ tableView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor), tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor), tableView.bottomAnchor.constraint(equalTo: hintLabel.topAnchor, constant: -12), hintLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16), hintLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16), hintLabel.bottomAnchor.constraint(equalTo: payButton.topAnchor, constant: -12), payButton.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16), payButton.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16), payButton.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -16) ]) } // MARK: - CartVCProtocol func reload() { tableView.reloadData() updateTotal() } func updateTotal() { let title = presenter.hasRestrictedItems ? "Подтвердить возраст и оплатить" : "Оплатить" hintLabel.isHidden = !presenter.hasRestrictedItems payButton.config(title: title, subtitle: "\(presenter.total) ₽") { [weak self] in guard let self else { return } self.presenter.startAgeGate(from: self) } } func showResult(title: String, message: String?) { let alert = UIAlertController(title: title, message: message, preferredStyle: .alert) alert.addAction(.init(title: "Понятно", style: .default)) present(alert, animated: true) } } // MARK: - UITableViewDataSource extension CartVC: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { presenter.itemsCount } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell: CartCell = tableView.dequeue(for: indexPath) cell.config(item: presenter.item(at: indexPath.row)) { [weak self] count in self?.presenter.changeCount(count, at: indexPath.row) } return cell } }