| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- //
- // LNSettingsViewController.swift
- // Lanu
- //
- // Created by OneeChan on 2025/12/22.
- //
- import Foundation
- import UIKit
- import SnapKit
- extension UIView {
- func pushToSettings() {
- let vc = LNSettingsViewController()
- navigationController?.pushViewController(vc, animated: true)
- }
- }
- class LNSettingsViewController: LNViewController {
- private let curLanguageLabel = UILabel()
-
- override func viewDidLoad() {
- super.viewDidLoad()
-
- setupViews()
- }
- }
- extension LNSettingsViewController {
- private func setupViews() {
- title = .init(key: "A00211")
- view.backgroundColor = .primary_1
-
- let functionView = UIView()
- functionView.backgroundColor = .fill
- functionView.layer.cornerRadius = 12
- view.addSubview(functionView)
- functionView.snp.makeConstraints { make in
- make.horizontalEdges.equalToSuperview().inset(16)
- make.top.equalToSuperview().offset(22)
- }
-
- let stackView = UIStackView()
- stackView.axis = .vertical
- stackView.spacing = 0
- functionView.addSubview(stackView)
- stackView.snp.makeConstraints { make in
- make.horizontalEdges.equalToSuperview().inset(16)
- make.verticalEdges.equalToSuperview().inset(3)
- }
-
- let language = buildFunctionItem(icon: .icLanguage18, title: .init(key: "A00256"), infoView: curLanguageLabel)
- curLanguageLabel.font = .body_s
- curLanguageLabel.textColor = .text_5
- curLanguageLabel.text = LNAppConfig.shared.curLang.text
- language.onTap {
- let panel = LNLanguageSettingPanel()
- panel.popup()
- }
- stackView.addArrangedSubview(language)
-
- let cleanCache = buildFunctionItem(icon: .icCleanCache, title: .init(key: "A00257"), infoView: nil)
- cleanCache.onTap {
- let alert = LNCommonAlertView()
- alert.titleLabel.text = .init(key: "A00257")
- alert.messageLabel.text = .init(key: "B00110")
- alert.showConfirm {
- showToast(.init(key: "A00258"))
- }
- alert.showCancel()
- alert.popup()
- }
- stackView.addArrangedSubview(cleanCache)
-
- let newVersionTag = LNNewVersionView()
- newVersionTag.isHidden = !LNAppConfig.shared.hasNewVersion
- let about = buildFunctionItem(icon: .icAbout, title: .init(key: "A00247"), infoView: newVersionTag)
- about.onTap { [weak self] in
- guard let self else { return }
- view.pushToAbout()
- }
- stackView.addArrangedSubview(about)
-
- let delete = buildFunctionItem(icon: .icDelete, title: .init(key: "A00259"), infoView: nil)
- delete.onTap { [weak self] in
- guard let self else { return }
- view.pushToWebView(LNJumpWebViewConfig.normalConfig(url: .deleteAccountUrl))
- }
- stackView.addArrangedSubview(delete)
-
- let logoutView = UIView()
- logoutView.backgroundColor = .fill
- logoutView.layer.cornerRadius = 12
- view.addSubview(logoutView)
- logoutView.snp.makeConstraints { make in
- make.horizontalEdges.equalToSuperview().inset(16)
- make.top.equalTo(functionView.snp.bottom).offset(10)
- }
- let logout = buildFunctionItem(icon: .icLogout, title: .init(key: "A00260"), infoView: nil)
- logout.onTap {
- LNCommonAlertView.showLogoutAlert()
- }
- logoutView.addSubview(logout)
- logout.snp.makeConstraints { make in
- make.horizontalEdges.equalToSuperview().inset(16)
- make.verticalEdges.equalToSuperview()
- }
- }
-
- private func buildFunctionItem(icon: UIImage, title: String, infoView: UIView?) -> UIView {
- let container = UIView()
- container.snp.makeConstraints { make in
- make.height.equalTo(42)
- }
-
- let ic = UIImageView()
- ic.image = icon.withRenderingMode(.alwaysTemplate)
- ic.tintColor = .text_4
- container.addSubview(ic)
- ic.snp.makeConstraints { make in
- make.leading.equalToSuperview()
- make.centerY.equalToSuperview()
- make.width.height.equalTo(18)
- }
-
- let arrow = UIImageView.arrowImageView(size: 14)
- arrow.tintColor = .text_4
- container.addSubview(arrow)
- arrow.snp.makeConstraints { make in
- make.centerY.equalToSuperview()
- make.trailing.equalToSuperview()
- }
-
- if let infoView {
- container.addSubview(infoView)
- infoView.snp.makeConstraints { make in
- make.centerY.equalToSuperview()
- make.trailing.equalTo(arrow.snp.leading).offset(-2)
- }
- }
-
- let titleLabel = UILabel()
- titleLabel.font = .body_m
- titleLabel.textColor = .text_5
- titleLabel.text = title
- container.addSubview(titleLabel)
- titleLabel.snp.makeConstraints { make in
- make.leading.equalTo(ic.snp.trailing).offset(2)
- make.verticalEdges.equalToSuperview()
- make.trailing.lessThanOrEqualTo((infoView ?? arrow).snp.leading)
- }
-
- return container
- }
- }
|