Use native navigationItem instead of bottom-view (#690)

This commit is contained in:
Nathan Mattes 2022-12-11 23:57:58 +01:00
parent c22f1fc66e
commit 3a00010d89
4 changed files with 21 additions and 100 deletions

View File

@ -67,8 +67,6 @@ extension MastodonConfirmEmailViewController {
override func viewDidLoad() { override func viewDidLoad() {
navigationItem.leftBarButtonItem = UIBarButtonItem()
setupOnboardingAppearance() setupOnboardingAppearance()
configureTitleLabel() configureTitleLabel()
configureMargin() configureMargin()

View File

@ -234,7 +234,6 @@ extension MastodonPickServerViewController {
} }
.store(in: &disposeBag) .store(in: &disposeBag)
navigationActionView.backButton.addTarget(self, action: #selector(MastodonPickServerViewController.backButtonDidPressed(_:)), for: .touchUpInside)
navigationActionView.nextButton.addTarget(self, action: #selector(MastodonPickServerViewController.nextButtonDidPressed(_:)), for: .touchUpInside) navigationActionView.nextButton.addTarget(self, action: #selector(MastodonPickServerViewController.nextButtonDidPressed(_:)), for: .touchUpInside)
} }
@ -260,11 +259,7 @@ extension MastodonPickServerViewController {
} }
extension MastodonPickServerViewController { extension MastodonPickServerViewController {
@objc private func backButtonDidPressed(_ sender: UIButton) {
navigationController?.popViewController(animated: true)
}
@objc private func nextButtonDidPressed(_ sender: UIButton) { @objc private func nextButtonDidPressed(_ sender: UIButton) {
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function) 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 } guard let server = viewModel.selectedServer.value else { return }

View File

@ -54,26 +54,13 @@ final class MastodonRegisterViewController: UIViewController, NeedsDependency, O
documentPickerController.delegate = self documentPickerController.delegate = self
return documentPickerController 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 { extension MastodonRegisterViewController {
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
navigationItem.leftBarButtonItem = UIBarButtonItem()
setupOnboardingAppearance() setupOnboardingAppearance()
viewModel.backgroundColor = view.backgroundColor ?? .clear viewModel.backgroundColor = view.backgroundColor ?? .clear
defer { defer {
@ -86,34 +73,14 @@ extension MastodonRegisterViewController {
hostingViewController.view.translatesAutoresizingMaskIntoConstraints = false hostingViewController.view.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(hostingViewController.view) view.addSubview(hostingViewController.view)
hostingViewController.view.pinToParent() hostingViewController.view.pinToParent()
navigationActionView.translatesAutoresizingMaskIntoConstraints = false navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Next", style: .done, target: self, action: #selector(MastodonRegisterViewController.nextButtonPressed(_:)))
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)
viewModel.$isAllValid viewModel.$isAllValid
.receive(on: DispatchQueue.main) .receive(on: DispatchQueue.main)
.sink { [weak self] isAllValid in .sink { [weak self] isAllValid in
guard let self = self else { return } guard let self = self else { return }
self.navigationActionView.nextButton.isEnabled = isAllValid self.navigationItem.rightBarButtonItem?.isEnabled = isAllValid
} }
.store(in: &disposeBag) .store(in: &disposeBag)
@ -165,13 +132,15 @@ extension MastodonRegisterViewController {
} }
.store(in: &disposeBag) .store(in: &disposeBag)
viewModel.$isRegistering // viewModel.$isRegistering
.receive(on: DispatchQueue.main) // .receive(on: DispatchQueue.main)
.sink { [weak self] isRegistering in // .sink { [weak self] isRegistering in
guard let self = self else { return } // guard let self = self else { return }
isRegistering ? self.navigationActionView.nextButton.showLoading() : self.navigationActionView.nextButton.stopLoading() // isRegistering ? self.navigationActionView.nextButton.showLoading() : self.navigationActionView.nextButton.stopLoading()
} // }
.store(in: &disposeBag) // .store(in: &disposeBag)
title = L10n.Scene.Register.title(viewModel.domain)
} }
override func viewDidAppear(_ animated: Bool) { override func viewDidAppear(_ animated: Bool) {
@ -183,12 +152,7 @@ extension MastodonRegisterViewController {
} }
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) { @objc private func nextButtonPressed(_ sender: UIButton) {
logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public)") logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public)")

View File

@ -26,9 +26,7 @@ final class MastodonServerRulesViewController: UIViewController, NeedsDependency
weak var coordinator: SceneCoordinator! { willSet { precondition(!isViewLoaded) } } weak var coordinator: SceneCoordinator! { willSet { precondition(!isViewLoaded) } }
var viewModel: MastodonServerRulesViewModel! var viewModel: MastodonServerRulesViewModel!
let stackView = UIStackView()
let tableView: UITableView = { let tableView: UITableView = {
let tableView = UITableView() let tableView = UITableView()
tableView.register(OnboardingHeadlineTableViewCell.self, forCellReuseIdentifier: String(describing: OnboardingHeadlineTableViewCell.self)) tableView.register(OnboardingHeadlineTableViewCell.self, forCellReuseIdentifier: String(describing: OnboardingHeadlineTableViewCell.self))
@ -40,17 +38,6 @@ final class MastodonServerRulesViewController: UIViewController, NeedsDependency
tableView.sectionHeaderTopPadding = 0 tableView.sectionHeaderTopPadding = 0
return tableView 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 { extension MastodonServerRulesViewController {
@ -58,39 +45,19 @@ extension MastodonServerRulesViewController {
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
navigationItem.leftBarButtonItem = UIBarButtonItem()
setupOnboardingAppearance() setupOnboardingAppearance()
defer { setupNavigationBarBackgroundView() } defer { setupNavigationBarBackgroundView() }
tableView.translatesAutoresizingMaskIntoConstraints = false tableView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(tableView) view.addSubview(tableView)
tableView.pinToParent() 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 tableView.delegate = self
viewModel.setupDiffableDataSource(tableView: tableView) 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) { override func viewDidAppear(_ animated: Bool) {
@ -104,13 +71,10 @@ extension MastodonServerRulesViewController {
extension MastodonServerRulesViewController { extension MastodonServerRulesViewController {
@objc private func backButtonPressed(_ sender: UIButton) { @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) navigationController?.popViewController(animated: true)
} }
@objc private func nextButtonPressed(_ sender: UIButton) { @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( let viewModel = MastodonRegisterViewModel(
context: context, context: context,
domain: viewModel.domain, domain: viewModel.domain,