美文网首页iOS bug修复程序员iOS Developer
[iOS 问题集锦] UISearchController.se

[iOS 问题集锦] UISearchController.se

作者: 段子周 | 来源:发表于2016-05-11 14:33 被阅读2035次

问题描述

UISearchController是iOS提供的最新的方便实现搜索框和搜索结果页的组件,但是大家往往需要在进入这个页面时候就让搜索框获得焦点并弹出键盘,提供给用户更好的体验

解决方案

各种google stackoverflow之后按照以下代码达到了想要的效果(我是将searchbar放在navigationBar上的):

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear: animated];
    self.searchController.active = true;
}

#pragma mark UISearchControllerDelegate
- (void)didPresentSearchController:(UISearchController *)searchController {
    [self.searchController.searchBar becomeFirstResponder]
}

查看文档,大家很容易明白这样做的原理

需要注意的是:一定是在viewDidAppear中active searchController

测试iOS 8上没有问题,但是iOS 9无法弹出键盘,又是一番查找,将代码修改如下解决问题:

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear: animated];
    self.searchController.active = true;
}

#pragma mark UISearchControllerDelegate
- (void)didPresentSearchController:(UISearchController *)searchController {
    [UIView animateWithDuration:0.1 animations:^{} completion:^(BOOL finished) {
        [self.searchController.searchBar becomeFirstResponder];
    }];
}

分析原因,didPresentSearchController应该是在searchController被present出来完成后调用,但是事实估计是还没有结束就调用了,所以里面执行becomeFirstResponder没有生效,延时解决问题(并不一定是根本原因)

附效果图

Paste_Image.png

相关文章

网友评论

  • 周一见丶:太感谢!!!!!!特别是最后延迟加载那一句
  • 8f1557a248b5:你这个searchbar的颜色是怎么控制的的?
  • 9d426ee34834:问你一个问题 就是!我的UIsearchController 的 searchBar 也是放在 导航栏上面的 重新设置一个tableViewController 接受搜索结果! 每次点击 之后 展示搜索结果 那个tabView 会上下移30多个单位,这个 有办法解决么
  • zl520k:那你还不如把becomefirst方法重写一下
    段子周:@zl520k 不懂额。。。
    zl520k:这个方法返回yes
    段子周:@zl520k o?怎么搞
  • 酷酷的哀殿:建议加上下面的代码
    [super viewDidAppear: animated];
    段子周:@酷酷的哀殿 有理。。。感谢

本文标题:[iOS 问题集锦] UISearchController.se

本文链接:https://www.haomeiwen.com/subject/urkurttx.html