问题描述
我正在使用 UISearchDisplayController
从我的列表中进行搜索.但是当我搜索一个字符时,它隐藏了 searchBar
.这是我开始搜索之前的快照:
I am using UISearchDisplayController
to search from my list. But when I search a character, it hides searchBar
. Here is the snapshot before I start searching:
这里隐藏了 searchBar
像这样:
Here it hides searchBar
like this:
#pragma mark - UISearchDisplayController Delegate Methods
//These methods will be used for search controller frame
- (void)searchDisplayController:(UISearchDisplayController *)controller didHideSearchResultsTableView:(UITableView *)tableView {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}
- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide) name:UIKeyboardWillHideNotification object:nil];
}
- (void) keyboardWillHide {
UITableView *tableView = [[self searchDisplayController] searchResultsTableView];
[tableView setContentInset:UIEdgeInsetsZero];
[tableView setScrollIndicatorInsets:UIEdgeInsetsZero];
}
- (void) searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller {
}
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller
shouldReloadTableForSearchString:(NSString *)searchString
{
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.001);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
for (UIView* v in self.searchDisplayController.searchResultsTableView.subviews) {
if ([v isKindOfClass: [UILabel class]] &&
[[(UILabel*)v text] isEqualToString:@"No Results"]) {
[(UILabel *)v setText:NO_RESULT_LABEL_STRING];
// .. do whatever you like to the UILabel here ..
break;
}
}
});
[self handleSearchForTerm:searchString];
return YES;
}
- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller
{
[[self dealsTableView] reloadData];
}
#pragma mark Search Method
- (void) handleSearchForTerm:(NSString *) searchString {
//First get all the objects which fulfill the criteria
[[self searchResultsArray] removeAllObjects];
for (Deal *currentDeal in self.dealsArray)
{
NSArray *searchQueryComponents = [searchString componentsSeparatedByString:@" "];
BOOL isGoAheadToAdd=YES;
for (NSString *currentSearchComponent in searchQueryComponents) {
NSString *trimmed = [currentSearchComponent stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
if ([trimmed length]>0) {
if ([[currentDeal title] rangeOfString:currentSearchComponent options:NSCaseInsensitiveSearch].location != NSNotFound)
{
isGoAheadToAdd=YES;
}
else {
isGoAheadToAdd=NO;
break;
}
}
}
if (isGoAheadToAdd) {
[[self searchResultsArray] addObject:currentDeal];
}
}
}
推荐答案
我必须为 searchResultsTableView
设置框架,因为它的原点是 (0,0).
I had to set the frame for searchResultsTableView
because its origin was at (0,0).
解决了这个问题:
-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView
{
[tableView setFrame:CGRectMake(0, 42, 320, 380)];
}
默认情况下,UISearchDisplayController
将 searchResultsTableView
的框架设置为 (0,0),因此 searchBar
隐藏在 后面searchResultsTableView
.
By default, UISearchDisplayController
sets the frame for searchResultsTableView
at (0,0), so the searchBar
was hiding behind the searchResultsTableView
.
这篇关于UISearchDisplayController 搜索后隐藏 searchBar的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!