Skip to content

Commit

Permalink
Optimize the embedded display of search results
Browse files Browse the repository at this point in the history
Optimize the  embedded display of search results,Added
showSearchResultWhenSearchBarRefocused and
showSearchResultWhenSearchTextChanged to control the display of search
results
  • Loading branch information
ko1o committed Jan 5, 2017
1 parent 346d467 commit cbfcb93
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 6 deletions.
2 changes: 1 addition & 1 deletion PYSearch/PYSearchSuggestionViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ - (void)setSearchSuggestions:(NSArray<NSString *> *)searchSuggestions
[self.tableView reloadData];

// 还原contentInset
if (!UIEdgeInsetsEqualToEdgeInsets(self.originalContentInset, UIEdgeInsetsZero) && !UIEdgeInsetsEqualToEdgeInsets(self.originalContentInset, UIEdgeInsetsMake(-30, 0, 30, 0))) { // originalContentInset非零 UIEdgeInsetsMake(-30, 0, 30, 0)是当键盘消失后自动调整的内边距
if (!UIEdgeInsetsEqualToEdgeInsets(self.originalContentInset, UIEdgeInsetsZero) && !UIEdgeInsetsEqualToEdgeInsets(self.originalContentInset, UIEdgeInsetsMake(-30, 0, 30 - 64, 0))) { // originalContentInset非零 UIEdgeInsetsMake(-30, 0, 30, 0)是当键盘消失后自动调整的内边距
self.tableView.contentInset = self.originalContentInset;
}
// 滚动到头部
Expand Down
12 changes: 11 additions & 1 deletion PYSearch/PYSearchViewController.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ typedef NS_ENUM(NSInteger, PYSearchResultShowMode) { // 搜索结果显示方式
/** 点击搜索建议时调用,如果实现该代理方法则点击搜索建议时searchViewController:didSearchWithsearchBar:searchText:失效 */
- (void)searchViewController:(PYSearchViewController *)searchViewController didSelectSearchSuggestionAtIndex:(NSInteger)index searchText:(NSString *)searchText;
/** 搜索框文本变化时,显示的搜索建议通过searchViewController的searchSuggestions赋值即可 */
- (void)searchViewController:(PYSearchViewController *)searchViewController searchTextDidChange:(UISearchBar *)seachBar searchText:(NSString *)searchText;
- (void)searchViewController:(PYSearchViewController *)searchViewController searchTextDidChange:(UISearchBar *)searchBar searchText:(NSString *)searchText;
/** 点击取消时调用,如果没有实现该代理方法,默认执行:[self dismissViewControllerAnimated:YES completion:nil]; */
- (void)didClickCancel:(PYSearchViewController *)searchViewController;

Expand Down Expand Up @@ -143,6 +143,16 @@ typedef NS_ENUM(NSInteger, PYSearchResultShowMode) { // 搜索结果显示方式
* 将目的控制器给该属性赋值,即将searchResultController.view添加到self.view
*/
@property (nonatomic, strong) UIViewController *searchResultController;
/**
* 是否显示搜索结果当搜索文本改变时(默认为NO)
* 该属性只要当searchResultShowMode == PYSearchResultShowModeEmbed时,才会生效
*/
@property (nonatomic, assign) BOOL showSearchResultWhenSearchTextChanged;
/**
* 是否显示搜索结果当搜索框重新聚焦(再次成为第一响应者时)(默认为NO)
* 该属性只要当searchResultShowMode == PYSearchResultShowModeEmbed时,才会生效
*/
@property (nonatomic, assign) BOOL showSearchResultWhenSearchBarRefocused;

/**
* 快速创建PYSearchViewController对象
Expand Down
34 changes: 30 additions & 4 deletions PYSearch/PYSearchViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,10 @@ - (void)setup
self.showSearchHistory = YES;
// 显示热门搜索
self.showHotSearch = YES;
// 当搜索文本改变时,隐藏搜索结果视图
self.showSearchResultWhenSearchTextChanged = NO;
// 当搜索框聚焦时,隐藏搜索结果视图
self.showSearchResultWhenSearchBarRefocused = NO;

// 创建搜索框
UIView *titleView = [[UIView alloc] init];
Expand Down Expand Up @@ -552,6 +556,16 @@ - (NSArray *)addAndLayoutTagsWithTagsContentView:(UIView *)contentView tagTexts:
}

#pragma mark - setter
- (void)setShowSearchResultWhenSearchTextChanged:(BOOL)showSearchResultWhenSearchTextChanged
{
_showSearchResultWhenSearchTextChanged = showSearchResultWhenSearchTextChanged;

// 当文本改变时动态改变搜索结果即自动隐藏搜索建议
if (_showSearchResultWhenSearchTextChanged == YES) {
self.searchSuggestionHidden = YES;
}
}

- (void)setShowHotSearch:(BOOL)showHotSearch
{
_showHotSearch = showHotSearch;
Expand Down Expand Up @@ -895,6 +909,12 @@ - (void)saveSearchCacheAndRefreshView
}

// 处理搜索结果
[self handleSearchResultShow];
}

/** 处理搜索结果显示 */
- (void)handleSearchResultShow
{
switch (self.searchResultShowMode) {
case PYSearchResultShowModePush: // Push
self.searchResultController.view.hidden = NO;
Expand All @@ -908,8 +928,6 @@ - (void)saveSearchCacheAndRefreshView
self.searchResultController.view.py_y = 64;
self.searchResultController.view.py_height = self.view.py_height - self.searchResultController.view.py_y;
self.searchSuggestionVC.view.hidden = YES;
// 清空搜索建议
self.searchSuggestions = nil;
break;
case PYSearchResultShowModeCustom: // 自定义

Expand Down Expand Up @@ -969,6 +987,14 @@ - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
// 处理搜索结果(可用于动态修改搜索结果)
if (self.searchResultShowMode == PYSearchResultShowModeEmbed && self.showSearchResultWhenSearchTextChanged) { // 当搜索结果显示模式为内嵌显示并且设置当搜索文本改变时显示搜索结果才显示
[self handleSearchResultShow];
// 搜索结果显示/隐藏(如果没有搜索文本就隐藏)
self.searchResultController.view.hidden = searchText.length == 0;
} else if (self.searchResultController) { // 存在搜索控制器
self.searchResultController.view.hidden = YES;
}
// 如果有搜索文本且显示搜索建议,则隐藏
self.baseSearchTableView.hidden = searchText.length && !self.searchSuggestionHidden;
// 根据输入文本显示建议搜索条件
Expand All @@ -988,8 +1014,8 @@ - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
if (self.searchResultShowMode == PYSearchResultShowModeEmbed) { // 搜索结果为内嵌时
// 搜索结果隐藏
self.searchResultController.view.hidden = YES;
// 搜索结果隐藏(如果没有搜索文本就隐藏)
self.searchResultController.view.hidden = searchBar.text.length == 0 || !self.showSearchResultWhenSearchBarRefocused;
// 根据输入文本显示建议搜索条件
self.searchSuggestionVC.view.hidden = self.searchSuggestionHidden || !searchBar.text.length; // 如果有搜索文本且显示搜索建议,则隐藏
if (self.searchSuggestionVC.view.hidden) { // 搜索建议隐藏
Expand Down

0 comments on commit cbfcb93

Please sign in to comment.