// // SPSettingsViewController.swift // MoviaBox // // Created by 佳尔 on 2025/4/28. // import UIKit class SPSettingsViewController: SPViewController { private lazy var dataArr: [SPMineItem] = createDataArr() { didSet { self.tableView.reloadData() } } //MARK: UI属性 private lazy var tableView: SPTableView = { let tableView = SPTableView(frame: .zero, style: .insetGrouped) tableView.delegate = self tableView.dataSource = self tableView.separatorStyle = .none tableView.rowHeight = 48 tableView.sectionFooterHeight = 0 SPSettingsCell.registerCell(tableView: tableView) return tableView }() override func viewDidLoad() { super.viewDidLoad() self.setBackgroundView(isShowGradient: false, bgImage: nil) self.title = "movia_profile_Setting".localized SPAppCacheManager.manager.getAllCache { [weak self] value in guard let self = self else { return } self.dataArr = self.createDataArr() } _setupUI() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.setNavigationBarHidden(false, animated: true) self.setNavigationNormalStyle() } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) self.dataArr = self.createDataArr() } } extension SPSettingsViewController { private func _setupUI() { view.addSubview(tableView) tableView.snp.makeConstraints { make in make.edges.equalToSuperview() } } } //MARK: -------------- UITableViewDelegate & UITableViewDataSource -------------- extension SPSettingsViewController: UITableViewDelegate, UITableViewDataSource { func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = SPSettingsCell.dequeueReusableCell(tableView: tableView, indexPath: indexPath) cell.item = dataArr[indexPath.section] return cell } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 1 } func numberOfSections(in tableView: UITableView) -> Int { return self.dataArr.count } func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 12 } func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { return 0 } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let item = dataArr[indexPath.section] switch item.type { case .aboutUs: let vc = SPAboutUsViewController() self.navigationController?.pushViewController(vc, animated: true) case .clearCache: clearCache() case .deleteAccount: let vc = SPDeleteAccountViewController() self.navigationController?.pushViewController(vc, animated: true) case .logout: logout() default: break } } } extension SPSettingsViewController { private func clearCache() { SPAppCacheManager.manager.cleanAllCache { [weak self] in guard let self = self else { return } self.dataArr = self.createDataArr() } } ///退出登录 private func logout() { let alert = UIAlertController(title: nil, message: "Confirm logout?".localized, preferredStyle: .alert) alert.addAction(UIAlertAction(title: "movia_affirm".localized, style: .default, handler: { _ in SPLoginManager.manager.logout { [weak self] isFinish in guard let self = self else { return } self.dataArr = self.createDataArr() } })) alert.addAction(UIAlertAction(title: "movia_Cancel".localized, style: .cancel)) self.present(alert, animated: true) } private func createDataArr() -> [SPMineItem] { let cache = SPAppCacheManager.manager.allCache var arr = [ SPMineItem(type: .clearCache, title: "Clear Cache".localized, subtitle: SPAppCacheManager.cacheToString(cache: cache)), SPMineItem(type: .aboutUs, title: "movia_profile_About_Us".localized), ] if SPLoginManager.manager.isLogin { arr.append(SPMineItem(type: .deleteAccount, title: "Delete Account".localized)) arr.append(SPMineItem(type: .logout, title: "Signout".localized)) } return arr } }