Skip to content

Commit

Permalink
废弃 QMUITableViewDelegate shouldShowSearchBarInTableView: 方法,使用 QMUICo…
Browse files Browse the repository at this point in the history
…mmonTableViewController.shouldShowSearchBar 代替
  • Loading branch information
MoLice committed Mar 29, 2017
1 parent 3c4001d commit 573ac12
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 11 deletions.
2 changes: 1 addition & 1 deletion QMUIKit/UIKitExtensions/QMUISearchController.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
* 2. 通过 searchBar 属性得到搜索框的引用并直接使用,例如 `tableHeaderView = searchController.searchBar`
* 3. 指定 searchResultsDelegate 属性并在其中实现 searchController:updateResultsForSearchString: 方法以更新搜索结果数据集
*
* @note QMUICommonTableViewController 内部自带 QMUISearchController,只需在 QMUITableViewDelegate shouldShowSearchBarInTableView: 方法里返回 YES 即可,无需自行初始化 QMUISearchController。
* @note QMUICommonTableViewController 内部自带 QMUISearchController,只需将属性 shouldShowSearchBar 置为 YES 即可,无需自行初始化 QMUISearchController。
*/
@interface QMUISearchController : QMUICommonViewController

Expand Down
2 changes: 1 addition & 1 deletion QMUIKit/UIKitExtensions/QMUITableViewProtocols.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
/**
* 控制是否在列表顶部显示搜索框。在QMUICommonTableViewController里已经接管了searchBar的初始化工作,所以外部只需要控制“显示/隐藏”,不需要自己再初始化一次。
*/
- (BOOL)shouldShowSearchBarInTableView:(QMUITableView *)tableView;
- (BOOL)shouldShowSearchBarInTableView:(QMUITableView *)tableView DEPRECATED_MSG_ATTRIBUTE("在 QMUI 1.3.7 里废弃,请使用 QMUICommonTableViewController.shouldShowSearchBar 代替");

/**
* 自定义要在<i>- (BOOL)touchesShouldCancelInContentView:(UIView *)view</i>内的逻辑<br/>
Expand Down
18 changes: 13 additions & 5 deletions QMUIKit/UIMainFrame/QMUICommonTableViewController.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ extern const UIEdgeInsets QMUICommonTableViewControllerInitialContentInsetNotSet
*
* 提供的功能包括:
*
* 1. 集成 `QMUISearchController`,可通过在 `shouldShowSearchBarInTableView:` 里返回 `YES` 来快速为列表生成一个搜索框
* 1. 集成 `QMUISearchController`,可通过属性 `shouldShowSearchBar` 来快速为列表生成一个 searchBar 及 searchController,具体请查看 QMUICommonTableViewController (Search)
*
* 2. 通过属性 `tableViewInitialContentInset` 和 `tableViewInitialScrollIndicatorInsets` 来提供对界面初始状态下的列表 `contentInset`、`contentOffset` 的调整能力,一般在系统的 `automaticallyAdjustsScrollViewInsets` 属性无法满足需求时使用。
*
Expand Down Expand Up @@ -82,7 +82,15 @@ extern const UIEdgeInsets QMUICommonTableViewControllerInitialContentInsetNotSet
@interface QMUICommonTableViewController (Search) <QMUISearchControllerDelegate>

/**
* 获取当前的searchController,注意只有当 `shouldShowSearchBarInTableView:` 返回 `YES` 时才有用
* 控制列表里是否需要搜索框,如果为 YES,则会在 viewDidLoad 之后创建一个 searchBar 作为 tableHeaderView;如果为 NO,则会移除已有的 searchBar 和 searchController。
* 默认为 NO。
* @note 若在 viewDidLoad 之前设置为 YES,也会等到 viewDidLoad 时才去创建搜索框。
* @note 用于代替 QMUI 1.3.7 以前使用的 `QMUITableViewDelegate shouldShowSearchBarInTableView:` 方法。
*/
@property(nonatomic, assign) BOOL shouldShowSearchBar;

/**
* 获取当前的 searchController,注意只有当 `shouldShowSearchBar` 为 `YES` 时才有用
*
* 默认为 `nil`
*
Expand All @@ -91,7 +99,7 @@ extern const UIEdgeInsets QMUICommonTableViewControllerInitialContentInsetNotSet
@property(nonatomic, strong, readonly) QMUISearchController *searchController;

/**
* 获取当前的searchBar,注意只有当 `shouldShowSearchBarInTableView:` 返回 `YES` 时才有用
* 获取当前的 searchBar,注意只有当 `shouldShowSearchBar` 为 `YES` 时才有用
*
* 默认为 `nil`
*
Expand All @@ -109,9 +117,9 @@ extern const UIEdgeInsets QMUICommonTableViewControllerInitialContentInsetNotSet
/**
* 初始化searchController和searchBar,在initSubViews的时候被自动调用。
*
* 会询问 `[self.tableView.delegate shouldShowSearchBarInTableView:]`,若返回 `YES`,则创建 searchBar 并将其以 `tableHeaderView` 的形式呈现在界面里;若返回 `NO`,则将 `tableHeaderView` 置为nil。
* 会询问 `self.shouldShowSearchBar`,若返回 `YES`,则创建 searchBar 并将其以 `tableHeaderView` 的形式呈现在界面里;若返回 `NO`,则将 `tableHeaderView` 置为nil。
*
* @warning `shouldShowSearchBarInTableView:` 默认返回 NO,需要 searchBar 的界面必须重写该方法并返回 `YES`
* @warning `self.shouldShowSearchBar` 默认为 NO,需要 searchBar 的界面必须手动将其置为 `YES`
*/
- (void)initSearchController;

Expand Down
42 changes: 38 additions & 4 deletions QMUIKit/UIMainFrame/QMUICommonTableViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@
const NSInteger kSectionHeaderFooterLabelTag = 1024;

@interface QMUICommonTableViewController () {
QMUISearchController *_searchController;
UISearchBar *_searchBar;
BOOL _shouldShowSearchBar;
QMUISearchController *_searchController;
UISearchBar *_searchBar;
}

@property(nonatomic,strong,readwrite) QMUITableView *tableView;
Expand Down Expand Up @@ -166,7 +167,9 @@ - (void)showEmptyView {

- (void)hideEmptyView {
[self.emptyView removeFromSuperview];
if ([self shouldShowSearchBarInTableView:self.tableView] && [self shouldHideSearchBarWhenEmptyViewShowing] && self.tableView.tableHeaderView == nil) {
BeginIgnoreDeprecatedWarning
if ((self.shouldShowSearchBar || [self shouldShowSearchBarInTableView:self.tableView]) && [self shouldHideSearchBarWhenEmptyViewShowing] && self.tableView.tableHeaderView == nil) {
EndIgnoreDeprecatedWarning
[self initSearchController];
self.tableView.tableHeaderView = self.searchBar;
[self hideTableHeaderViewInitialIfCanWithAnimated:NO];
Expand Down Expand Up @@ -330,6 +333,35 @@ - (BOOL)shouldHideTableHeaderViewInitial {

@implementation QMUICommonTableViewController (Search)

- (BOOL)shouldShowSearchBar {
return _shouldShowSearchBar;
}

- (void)setShouldShowSearchBar:(BOOL)shouldShowSearchBar {
BOOL isValueChanged = _shouldShowSearchBar != shouldShowSearchBar;
if (!isValueChanged) {
return;
}

if (shouldShowSearchBar) {
[self initSearchController];
} else {
if (self.searchBar) {
if (self.tableView.tableHeaderView == self.searchBar) {
self.tableView.tableHeaderView = nil;
}
[self.searchBar removeFromSuperview];
_searchBar = nil;
}
if (self.searchController) {
self.searchController.searchResultsDelegate = nil;
_searchController = nil;
}
}

_shouldShowSearchBar = shouldShowSearchBar;
}

- (QMUISearchController *)searchController {
return _searchController;
}
Expand All @@ -339,7 +371,9 @@ - (UISearchBar *)searchBar {
}

- (void)initSearchController {
if ([self.tableView.delegate shouldShowSearchBarInTableView:self.tableView] && !self.searchController) {
BeginIgnoreDeprecatedWarning
if ([self isViewLoaded] && (self.shouldShowSearchBar || [self.tableView.delegate shouldShowSearchBarInTableView:self.tableView]) && !self.searchController) {
EndIgnoreDeprecatedWarning
_searchController = [[QMUISearchController alloc] initWithContentsViewController:self];
self.searchController.searchResultsDelegate = self;
self.searchController.searchBar.placeholder = @"搜索";
Expand Down

0 comments on commit 573ac12

Please sign in to comment.