From 3a00010d891592b580be98ff87d1762f846ef56e Mon Sep 17 00:00:00 2001 From: Nathan Mattes Date: Sun, 11 Dec 2022 23:57:58 +0100 Subject: [PATCH] Use native navigationItem instead of bottom-view (#690) --- .../MastodonConfirmEmailViewController.swift | 2 - .../MastodonPickServerViewController.swift | 7 +- .../MastodonRegisterViewController.swift | 66 +++++-------------- .../MastodonServerRulesViewController.swift | 46 ++----------- 4 files changed, 21 insertions(+), 100 deletions(-) diff --git a/Mastodon/Scene/Onboarding/ConfirmEmail/MastodonConfirmEmailViewController.swift b/Mastodon/Scene/Onboarding/ConfirmEmail/MastodonConfirmEmailViewController.swift index ae8a4933e..71a1aeb02 100644 --- a/Mastodon/Scene/Onboarding/ConfirmEmail/MastodonConfirmEmailViewController.swift +++ b/Mastodon/Scene/Onboarding/ConfirmEmail/MastodonConfirmEmailViewController.swift @@ -67,8 +67,6 @@ extension MastodonConfirmEmailViewController { override func viewDidLoad() { - navigationItem.leftBarButtonItem = UIBarButtonItem() - setupOnboardingAppearance() configureTitleLabel() configureMargin() diff --git a/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewController.swift b/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewController.swift index 057c742c1..bcb040757 100644 --- a/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewController.swift +++ b/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewController.swift @@ -234,7 +234,6 @@ extension MastodonPickServerViewController { } .store(in: &disposeBag) - navigationActionView.backButton.addTarget(self, action: #selector(MastodonPickServerViewController.backButtonDidPressed(_:)), for: .touchUpInside) navigationActionView.nextButton.addTarget(self, action: #selector(MastodonPickServerViewController.nextButtonDidPressed(_:)), for: .touchUpInside) } @@ -260,11 +259,7 @@ extension MastodonPickServerViewController { } extension MastodonPickServerViewController { - - @objc private func backButtonDidPressed(_ sender: UIButton) { - navigationController?.popViewController(animated: true) - } - + @objc private func nextButtonDidPressed(_ sender: UIButton) { os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function) guard let server = viewModel.selectedServer.value else { return } diff --git a/Mastodon/Scene/Onboarding/Register/MastodonRegisterViewController.swift b/Mastodon/Scene/Onboarding/Register/MastodonRegisterViewController.swift index f239e59b7..b066827d7 100644 --- a/Mastodon/Scene/Onboarding/Register/MastodonRegisterViewController.swift +++ b/Mastodon/Scene/Onboarding/Register/MastodonRegisterViewController.swift @@ -54,26 +54,13 @@ final class MastodonRegisterViewController: UIViewController, NeedsDependency, O documentPickerController.delegate = self return documentPickerController }() - - let navigationActionView: NavigationActionView = { - let navigationActionView = NavigationActionView() - navigationActionView.backgroundColor = Asset.Scene.Onboarding.background.color - return navigationActionView - }() - - deinit { - os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s", (#file as NSString).lastPathComponent, #line, #function) - } - } extension MastodonRegisterViewController { override func viewDidLoad() { super.viewDidLoad() - - navigationItem.leftBarButtonItem = UIBarButtonItem() - + setupOnboardingAppearance() viewModel.backgroundColor = view.backgroundColor ?? .clear defer { @@ -86,34 +73,14 @@ extension MastodonRegisterViewController { hostingViewController.view.translatesAutoresizingMaskIntoConstraints = false view.addSubview(hostingViewController.view) hostingViewController.view.pinToParent() - - navigationActionView.translatesAutoresizingMaskIntoConstraints = false - view.addSubview(navigationActionView) - defer { - view.bringSubviewToFront(navigationActionView) - } - NSLayoutConstraint.activate([ - navigationActionView.leadingAnchor.constraint(equalTo: view.leadingAnchor), - navigationActionView.trailingAnchor.constraint(equalTo: view.trailingAnchor), - view.bottomAnchor.constraint(equalTo: navigationActionView.bottomAnchor), - ]) - - navigationActionView - .observe(\.bounds, options: [.initial, .new]) { [weak self] navigationActionView, _ in - guard let self = self else { return } - let inset = navigationActionView.frame.height - self.viewModel.bottomPaddingHeight = inset - } - .store(in: &observations) - - navigationActionView.backButton.addTarget(self, action: #selector(MastodonRegisterViewController.backButtonPressed(_:)), for: .touchUpInside) - navigationActionView.nextButton.addTarget(self, action: #selector(MastodonRegisterViewController.nextButtonPressed(_:)), for: .touchUpInside) - + + navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Next", style: .done, target: self, action: #selector(MastodonRegisterViewController.nextButtonPressed(_:))) + viewModel.$isAllValid .receive(on: DispatchQueue.main) .sink { [weak self] isAllValid in guard let self = self else { return } - self.navigationActionView.nextButton.isEnabled = isAllValid + self.navigationItem.rightBarButtonItem?.isEnabled = isAllValid } .store(in: &disposeBag) @@ -165,13 +132,15 @@ extension MastodonRegisterViewController { } .store(in: &disposeBag) - viewModel.$isRegistering - .receive(on: DispatchQueue.main) - .sink { [weak self] isRegistering in - guard let self = self else { return } - isRegistering ? self.navigationActionView.nextButton.showLoading() : self.navigationActionView.nextButton.stopLoading() - } - .store(in: &disposeBag) +// viewModel.$isRegistering +// .receive(on: DispatchQueue.main) +// .sink { [weak self] isRegistering in +// guard let self = self else { return } +// isRegistering ? self.navigationActionView.nextButton.showLoading() : self.navigationActionView.nextButton.stopLoading() +// } +// .store(in: &disposeBag) + + title = L10n.Scene.Register.title(viewModel.domain) } override func viewDidAppear(_ animated: Bool) { @@ -183,12 +152,7 @@ extension MastodonRegisterViewController { } extension MastodonRegisterViewController { - - @objc private func backButtonPressed(_ sender: UIButton) { - logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public)") - navigationController?.popViewController(animated: true) - } - + @objc private func nextButtonPressed(_ sender: UIButton) { logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public)") diff --git a/Mastodon/Scene/Onboarding/ServerRules/MastodonServerRulesViewController.swift b/Mastodon/Scene/Onboarding/ServerRules/MastodonServerRulesViewController.swift index f850991f2..35be5c2d9 100644 --- a/Mastodon/Scene/Onboarding/ServerRules/MastodonServerRulesViewController.swift +++ b/Mastodon/Scene/Onboarding/ServerRules/MastodonServerRulesViewController.swift @@ -26,9 +26,7 @@ final class MastodonServerRulesViewController: UIViewController, NeedsDependency weak var coordinator: SceneCoordinator! { willSet { precondition(!isViewLoaded) } } var viewModel: MastodonServerRulesViewModel! - - let stackView = UIStackView() - + let tableView: UITableView = { let tableView = UITableView() tableView.register(OnboardingHeadlineTableViewCell.self, forCellReuseIdentifier: String(describing: OnboardingHeadlineTableViewCell.self)) @@ -40,17 +38,6 @@ final class MastodonServerRulesViewController: UIViewController, NeedsDependency tableView.sectionHeaderTopPadding = 0 return tableView }() - - let navigationActionView: NavigationActionView = { - let navigationActionView = NavigationActionView() - navigationActionView.backgroundColor = Asset.Scene.Onboarding.background.color - return navigationActionView - }() - - deinit { - os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function) - } - } extension MastodonServerRulesViewController { @@ -58,39 +45,19 @@ extension MastodonServerRulesViewController { override func viewDidLoad() { super.viewDidLoad() - navigationItem.leftBarButtonItem = UIBarButtonItem() - setupOnboardingAppearance() defer { setupNavigationBarBackgroundView() } tableView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(tableView) tableView.pinToParent() - - navigationActionView.translatesAutoresizingMaskIntoConstraints = false - view.addSubview(navigationActionView) - defer { - view.bringSubviewToFront(navigationActionView) - } - NSLayoutConstraint.activate([ - navigationActionView.leadingAnchor.constraint(equalTo: view.leadingAnchor), - navigationActionView.trailingAnchor.constraint(equalTo: view.trailingAnchor), - view.bottomAnchor.constraint(equalTo: navigationActionView.bottomAnchor), - ]) - - navigationActionView - .observe(\.bounds, options: [.initial, .new]) { [weak self] navigationActionView, _ in - guard let self = self else { return } - let inset = navigationActionView.frame.height - self.tableView.contentInset.bottom = inset - } - .store(in: &observations) - + tableView.delegate = self viewModel.setupDiffableDataSource(tableView: tableView) - navigationActionView.backButton.addTarget(self, action: #selector(MastodonServerRulesViewController.backButtonPressed(_:)), for: .touchUpInside) - navigationActionView.nextButton.addTarget(self, action: #selector(MastodonServerRulesViewController.nextButtonPressed(_:)), for: .touchUpInside) + + navigationItem.rightBarButtonItem = UIBarButtonItem(title: "I agree", style: .done, target: self, action: #selector(MastodonServerRulesViewController.nextButtonPressed(_:))) + title = L10n.Scene.ServerRules.title } override func viewDidAppear(_ animated: Bool) { @@ -104,13 +71,10 @@ extension MastodonServerRulesViewController { extension MastodonServerRulesViewController { @objc private func backButtonPressed(_ sender: UIButton) { - logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public)") navigationController?.popViewController(animated: true) } @objc private func nextButtonPressed(_ sender: UIButton) { - logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public)") - let viewModel = MastodonRegisterViewModel( context: context, domain: viewModel.domain,