关于UISearchDisplayController的一些使用经验分享

1.  UISearchDisplayController.searchResultsTableView 的frame指定只有在 didShowSearchResultsTableView委托调用之后,反正我觉得系统会改动它的大小位置,所以我不得不写了一个重新定位它的frame,来覆盖系统的默认设置。

2. 
UISearchDisplayController.searchResultsTableView也能使用分组样式UITableViewStyleGrouped,只是没有现成的接口,你可以通过KVC机制修改它的私有变量_searchResultsTableViewStyle来达到目的。

3. 关于修改no results标签的问题。我觉得网上的答案,包括stackoverflow上的答案,很多都忽略了一个问题:在shouldReloadTableForSearchString委托中找到searchResultsTableView的label成员,然后将label.text修改为自己想要的描述。但是在第一次加载的searchResultsTableView的时候,它还没有加载子视图,no result 标签会修改失败。所以要推迟相关的子视图检测代码的执行:
dispatch_time_t popTime  =  dispatch_time(DISPATCH_TIME_NOW,  0.001 );
    dispatch_after(popTime, dispatch_get_main_queue(), 
^ ( void ){
        
for  (UIView  *  subview  in  self.searchDC.searchResultsTableView.subviews) {
            
if  ([subview isKindOfClass: [UILabel  class ]])
            {
                subview.hidden 
=  YES;
            }
        }
    });

4. 关于修改背景searchResultsTableView背景的问题:使用UITableViewStyleGrouped总会有一些麻烦,我个人是这么认为的。反正我在viewDidLoad接口里修改背景颜色是不成功的,够来在UISearchBar的委托方法里修改成功了。在用UITableViewStyleGrouped风格的时候,别忘了这一句:searchResultsTableView.backgroundView = nil,没有它你修改不了背景颜色。

5.一个关于searchResultsTableView的奇怪问题:搜索之后,我能得到searchResultsTableView正确的样式,但是在没有取消搜索的时候,我通过TabBar切换另一个页面(TabBar管理了两个页面,我搜索的是其中一个页面),然后再切回来,怪事发生了:
searchResultsTableView的宽和高都变为原来的两倍,我无法解释。

6.didLoadSearchResultsTableView委托方法的问题:通过模拟器测试,我发现它只会在willUnloadSearchResultsTableView调用后调用,也就是在searchResultsTableView unload之后,而不是在searchResultsTableView 加载完之后,这让我觉得非常奇怪,因为它的命名跟它的行为完全不符。

7. 修复display 偏移

- (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:(NSNotification *)aNotification

{

    NSDictionary* info = [aNotification userInfo];

    CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

    

    UITableView *tableView = [searchC searchResultsTableView];

    [tableView setContentInset:UIEdgeInsetsMake(0, 0, kbSize.height, 0)];

    [tableView setScrollIndicatorInsets:UIEdgeInsetsMake(0, 0, kbSize.height, 0)];

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值