神刀安全网

iOS开发-搜索栏 UISearchController

在这里就不细节的描述UISearchController的所有属性和方法了,主要提一下遇到的一些坑以及微信搜索框的实现方法之一:

进入编辑状态时会出现偏移64点的问题,设置下面的属性即可:
self.definesPresentationContext =YES;

当然啦,加了这个后,当属性hidesNavigationBarDuringPresentation = YES时有人碰到搜索框进入编辑时向下偏移64的问题 ,设置 navigationBar 的 translucent属性即可,这个属性默认是NO,需要设置为YES:
[self.navigationController.navigationBarsetTranslucent:YES];

这样就完美解决了 。

接下来说个实例,仿微信搜索框:

大家都知道微信在拉人进群,选择的人会显示在搜索框的左侧,其实这个做法有很多种,我接下来我所实现的方法:
不知道大家有没有仔细看UITextField的属性,它有一个leftView,就是那个放大镜,这个是可以自定义的
拿到searchBar的TextField
UITextField *searchField = [self.searchController.searchBarvalueForKey:@"_searchField"];
可以先申明个属性保存这个放大镜,像微信那样在合适的时候换成放大镜
self.lensView = searchField.leftView;
我用的是UIColectionView来做leftView,UIColectionView的创建我这里就不说了,其实就是在合适的时候,放大镜和UIColectionView赋给leftView,在选择人的时候进行判断

if (self.seleArray.count > 0) {         searchField.leftView = self.collectionView;     } else {         searchField.leftView = self.lensView;     }

记得改变UICollectionView的宽。
按照微信的显示,如果没选择人,进入编辑时要隐藏放大镜,退出编辑时要显示放大镜,这个可以在UISearchBarDelegate里进行设置:

#pragma mark - UISearchBarDelegate - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {     //隐藏放大镜     UITextField *searchField = [searchBar valueForKey:@"_searchField"];     if (searchField.leftView == self.lensView) {         [searchField setLeftViewMode:UITextFieldViewModeNever];     } else {         [searchField setLeftViewMode:UITextFieldViewModeAlways];     } }  - (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar {     UITextField *searchField = [searchBar valueForKey:@"_searchField"];     [searchField setLeftViewMode:UITextFieldViewModeAlways]; }

删除人和增加人就相当于删除和增加UICollectionView的cell,也很方便,但是我在这里遇到问题,就是UICollectionView作为leftView时,cell不能被选中,这个问题我没找到原因,实现微信点击cell删除功能,我是在cell上的UIImageView上设置点击手势,利用手势来达到点击cell的效果,如果大家有更好的实现方法,可以留言,谢谢!

另外一个点就是放大镜默认居左显示问题,这个在网上有很多方法,具体就是建一个UISearchBar的分类,用一个属性来控制是居中还是居左显示,这里就不多做讲述了,直接上代码吧:
h文件
#import <UIKit/UIKit.h>  @interface UISearchBar (LeftPlaceholer)  //YES 居中 //NO 靠左 @property (nonatomic,assign,setter = setHasCenterdPlaceholder:)BOOL hasCenterdPlaceholder;  @end
m文件
#import "UISearchBar+LeftPlaceholer.h"  @implementation UISearchBar (LeftPlacdholer) @dynamic hasCenterdPlaceholder; - (void)setHasCenterdPlaceholder:(BOOL)hasCenterdPlaceholder {     hasCenterdPlaceholder = hasCenterdPlaceholder;     SEL centerSelector =NSSelectorFromString([NSStringstringWithFormat:@"%@%@",@"setCenter",@"Placeholder:"]);     if ([selfrespondsToSelector:centerSelector]) {         NSMethodSignature *signature = [[UISearchBarclass]instanceMethodSignatureForSelector:centerSelector];         NSInvocation *invocation = [NSInvocationinvocationWithMethodSignature:signature];         [invocation setTarget:self];         [invocation setSelector:centerSelector];         [invocation setArgument:&hasCenterdPlaceholderatIndex:2];         [invocation invoke];     } }  @end

第一次写,全是干货,希望能帮助到大家,谢谢!

效果图:

iOS开发-搜索栏 UISearchController

仿微信搜索框效果.gif

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » iOS开发-搜索栏 UISearchController

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址