From 9a19001df9a6c93c7aad15649c5965104c6a0af8 Mon Sep 17 00:00:00 2001 From: CMK Date: Fri, 16 Jul 2021 11:27:40 +0800 Subject: [PATCH] fix: search may push twice when long press on the search bar issue --- .../Search/Search/SearchViewController.swift | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/Mastodon/Scene/Search/Search/SearchViewController.swift b/Mastodon/Scene/Search/Search/SearchViewController.swift index 2880a1504..7c5003703 100644 --- a/Mastodon/Scene/Search/Search/SearchViewController.swift +++ b/Mastodon/Scene/Search/Search/SearchViewController.swift @@ -82,6 +82,8 @@ final class SearchViewController: UIViewController, NeedsDependency { return view }() + let searchBarTapPublisher = PassthroughSubject() + } extension SearchViewController { @@ -123,6 +125,18 @@ extension SearchViewController { searchBar.placeholder = L10n.Scene.Search.SearchBar.placeholder searchBar.delegate = self navigationItem.titleView = searchBar + + searchBarTapPublisher + .throttle(for: 0.5, scheduler: DispatchQueue.main, latest: false) + .sink { [weak self] in + guard let self = self else { return } + // push to search detail + let searchDetailViewModel = SearchDetailViewModel() + searchDetailViewModel.needsBecomeFirstResponder = true + self.navigationController?.delegate = self.searchTransitionController + self.coordinator.present(scene: .searchDetail(viewModel: searchDetailViewModel), from: self, transition: .customPush) + } + .store(in: &disposeBag) } private func setupScrollView() { @@ -161,12 +175,7 @@ extension SearchViewController { extension SearchViewController: UISearchBarDelegate { func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool { os_log("%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function) - - // push to search detail - let searchDetailViewModel = SearchDetailViewModel() - searchDetailViewModel.needsBecomeFirstResponder = true - self.navigationController?.delegate = self.searchTransitionController - self.coordinator.present(scene: .searchDetail(viewModel: searchDetailViewModel), from: self, transition: .customPush) + searchBarTapPublisher.send() return false } }