当前位置 博文首页 > xixi:UISearchBar 和 UISearchDisplayController 没有在UITable

    xixi:UISearchBar 和 UISearchDisplayController 没有在UITable

    作者:[db:作者] 时间:2021-08-07 15:36

    由于设计需求 UISearchBar 和 UISearchDisplayController 没有在UITableView 的headerView 导致searchResultsTableView的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(resSetFrame:) name:UIKeyboardWillHideNotification object:nil];
    }
    
    - (void)resSetFrame:(NSNotification*)notification
    {
        CGFloat height = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;
        UITableView *tableView = [[self searchDisplayController] searchResultsTableView];
        UIEdgeInsets inset;
        //49 我加上 49 是因为 还有tabbar 在显示 没有隐藏
        [[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0 ? (inset = UIEdgeInsetsMake(0, 0, height + 49, 0)) : (inset = UIEdgeInsetsZero);
        [tableView setContentInset:inset];
        [tableView setScrollIndicatorInsets:inset];
    }




    ------------分割线-----------------


    附带 更改 cancel 变更为 “取消”


    -(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
    {
        your_searchBar.showsCancelButton = YES;
        self.navigationController.navigationBar.hidden = YES;
        //将 cancel 改成 取消 并且显示白色
        for(id item in [searchBar.subviews[0] subviews])
        {
            NSLog(@"%@",item);
            if([item isKindOfClass:[UIButton class]])
            {
                UIButton *btn = (UIButton *)item;
                [btn setTitle:@"取消" forState:UIControlStateNormal];
                btn.tintColor = [UIColor whiteColor];
                [btn setNeedsDisplay];
            }
        }
    }
    



    cs