diff --git a/enzevalos_iphone/InboxViewController.swift b/enzevalos_iphone/InboxViewController.swift index 42b4d199d56ea57ec8a83b9b88383d5c5b671539..c9693df3bbff95cdf7585573a474873f34497d2a 100644 --- a/enzevalos_iphone/InboxViewController.swift +++ b/enzevalos_iphone/InboxViewController.swift @@ -39,6 +39,7 @@ class InboxViewController: UITableViewController, InboxCellDelegator { } } } + var searchBarTimer: Timer? @IBOutlet weak var lastUpdateButton: UIBarButtonItem! var lastUpdateLabel = UILabel(frame: CGRect.zero) @@ -248,7 +249,20 @@ class InboxViewController: UITableViewController, InboxCellDelegator { return searchController.isActive && !searchBarIsEmpty } - func filterContentForSearchText(_ searchText: String, scope: Int = 0) { + /// searches a given string with a delay so that the entire client doesn't lag if the inbox is very big + func startSearch(searchText: String, scope: Int = 0) { + if #available(iOS 10.0, *) { + if let searchBarTimer: Timer = self.searchBarTimer { + searchBarTimer.invalidate() + } + + self.searchBarTimer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false, block: { _ in + self.filterContentForSearchText(searchText, scope: scope) + }) + } + } + + private func filterContentForSearchText(_ searchText: String, scope: Int = 0) { var records = [KeyRecord]() if scope == 0 || scope == 3 { records += folder.records.filter({ (record: KeyRecord) -> Bool in @@ -286,13 +300,13 @@ extension InboxViewController: UISearchResultsUpdating { // https://www.raywenderlich.com/157864/uisearchcontroller-tutorial-getting-started func updateSearchResults(for searchController: UISearchController) { - filterContentForSearchText(searchController.searchBar.text!, scope: searchController.searchBar.selectedScopeButtonIndex) + startSearch(searchText: searchController.searchBar.text!, scope: searchController.searchBar.selectedScopeButtonIndex) } } extension InboxViewController: UISearchBarDelegate { func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) { - filterContentForSearchText(searchBar.text!, scope: selectedScope) + startSearch(searchText: searchBar.text!, scope: selectedScope) } }