搜索后UISearchDisplayController隐藏搜索栏(UISearchDisplayC

2019-09-27 18:56发布

我使用UISearchDisplayController从我的列表中进行搜索。 但是,当我搜索一个字符,它隐藏searchBar 。 这里是快照之前,我开始搜索:

这隐藏searchBar是这样的:

#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];

        }
    }
}

Answer 1:

尝试这个

@interface MySearchDisplayController : UISearchDisplayController

@end

@implementation MySearchDisplayController

- (void)setActive:(BOOL)visible animated:(BOOL)animated
{
    [super setActive: visible animated: animated];

    [self.searchContentsController.navigationController setNavigationBarHidden: NO animated: NO];
}


Answer 2:

我不得不设置帧searchResultsTableView ,因为它的起源是在(0,0)。

这个解决它:

-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView
{
    [tableView setFrame:CGRectMake(0, 42, 320, 380)];
}

默认情况下, UISearchDisplayController将针对帧searchResultsTableView在(0,0),因此, searchBar藏身的后面searchResultsTableView



文章来源: UISearchDisplayController hide searchBar after searching