From f516f30c26cabfbd77b05d1b063a0c59bf85f755 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 21 Jun 2018 09:59:01 -0400 Subject: [PATCH] Auto-dismiss search keyboard; "cancel search" button. --- .../ConversationSearchViewController.swift | 14 ++++++++ .../HomeView/HomeViewController.m | 36 ++++++++++++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/Signal/src/ViewControllers/HomeView/ConversationSearchViewController.swift b/Signal/src/ViewControllers/HomeView/ConversationSearchViewController.swift index 2039b8372..c0f88a133 100644 --- a/Signal/src/ViewControllers/HomeView/ConversationSearchViewController.swift +++ b/Signal/src/ViewControllers/HomeView/ConversationSearchViewController.swift @@ -4,9 +4,17 @@ import Foundation +@objc +protocol ConversationSearchViewDelegate: class { + func conversationSearchViewWillBeginDragging() +} + @objc class ConversationSearchViewController: UITableViewController { + @objc + public weak var delegate: ConversationSearchViewDelegate? + @objc public var searchText = "" { didSet { @@ -300,6 +308,12 @@ class ConversationSearchViewController: UITableViewController { // TODO: more performant way to do this? self.tableView.reloadData() } + + // MARK: - UIScrollViewDelegate + + override func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { + delegate?.conversationSearchViewWillBeginDragging() + } } class EmptySearchResultCell: UITableViewCell { diff --git a/Signal/src/ViewControllers/HomeView/HomeViewController.m b/Signal/src/ViewControllers/HomeView/HomeViewController.m index b19e3f680..3e88d2ae1 100644 --- a/Signal/src/ViewControllers/HomeView/HomeViewController.m +++ b/Signal/src/ViewControllers/HomeView/HomeViewController.m @@ -45,7 +45,8 @@ NSString *const kArchivedConversationsReuseIdentifier = @"kArchivedConversations @interface HomeViewController () + UISearchBarDelegate, + ConversationSearchViewDelegate> @property (nonatomic) UITableView *tableView; @property (nonatomic) UILabel *emptyBoxLabel; @@ -378,6 +379,7 @@ NSString *const kArchivedConversationsReuseIdentifier = @"kArchivedConversations self.tableView.tableHeaderView = self.searchBar; ConversationSearchViewController *searchResultsController = [ConversationSearchViewController new]; + searchResultsController.delegate = self; self.searchResultsController = searchResultsController; [self addChildViewController:searchResultsController]; [self.view addSubview:searchResultsController.view]; @@ -938,16 +940,22 @@ NSString *const kArchivedConversationsReuseIdentifier = @"kArchivedConversations [self.tableView setContentOffset:CGPointZero animated:NO]; [self updateSearchResultsVisibility]; + + [self ensureSearchBarCancelButton]; } - (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar { [self updateSearchResultsVisibility]; + + [self ensureSearchBarCancelButton]; } - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { [self updateSearchResultsVisibility]; + + [self ensureSearchBarCancelButton]; } - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar @@ -959,7 +967,17 @@ NSString *const kArchivedConversationsReuseIdentifier = @"kArchivedConversations { self.searchBar.text = nil; + [self.searchBar resignFirstResponder]; + OWSAssert(!self.searchBar.isFirstResponder); + [self updateSearchResultsVisibility]; + + [self ensureSearchBarCancelButton]; +} + +- (void)ensureSearchBarCancelButton +{ + self.searchBar.showsCancelButton = (self.searchBar.isFirstResponder || self.searchBar.text.length > 0); } - (void)updateSearchResultsVisibility @@ -979,6 +997,22 @@ NSString *const kArchivedConversationsReuseIdentifier = @"kArchivedConversations } } +#pragma mark - UIScrollViewDelegate + +- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView +{ + [self.searchBar resignFirstResponder]; + OWSAssert(!self.searchBar.isFirstResponder); +} + +#pragma mark - ConversationSearchViewDelegate + +- (void)conversationSearchViewWillBeginDragging +{ + [self.searchBar resignFirstResponder]; + OWSAssert(!self.searchBar.isFirstResponder); +} + #pragma mark - HomeFeedTableViewCellDelegate - (void)tableViewCellTappedDelete:(NSIndexPath *)indexPath