最近在做一个搜索的功能,觉得自定义有点麻烦,就去研究了一下系统的UISearchController,踩了一些坑,现在分享出来。
常规代码这边就不说了,主要是在UITableView的tableHeaderView放入searchBar。
现在说一下如何更改搜索框的样式和怎么解决cancel按钮的文字怎么改变。
我们直接查看UISearchController的searchBar里面的一些API,你会发现它有一个searchTextField属性,直接上代码:
UITextField *field = self.searchController.searchBar.searchTextField;
field.borderStyle = UITextBorderStyleLine;
field.layer.cornerRadius = 18;
field.layer.masksToBounds = YES;
field.layer.borderWidth = 2;
field.layer.borderColor = [UIColor colorWithRed:0.0/255.0 green:179.0/255.0 blue:234.0/255.0 alpha:1.0].CGColor;
利用上面的代码,就可以修改搜索框的样式。
下面说说如何修改cancel
最直接的办法就是在info.plist文件中的Localization native development region改为china

还有一种方法,有一点点小问题,通过遍历searchBar的subviews,最终找到cancel按钮,再修改,但是呢,在打开程序第一次打开搜索框之后,才会修改cancel,除非你之前就设置了self.searchController.searchBar.showsCancelButton = YES;
附上代码:
for (id search in [self.searchController.searchBar subviews]) {
NSLog(@"%@",search);
for (id view in [search subviews]) {
NSLog(@"%@",view);
if([view isKindOfClass:NSClassFromString(@"_UISearchBarSearchContainerView")]){
NSLog(@"%@",view);
for (id views in [view subviews]) {
NSLog(@"button:%@",views);
if([views isKindOfClass:[UIButton class]]){
UIButton *btn = (UIButton *)views;
[btn setTitle:@"取消" forState:UIControlStateNormal];
}
}
}
}
}
最后附上一个可以修改cancel按钮的颜色的方法
[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTintColor:[UIColor blackColor]];
如果你有更好的方法,可以分享出来,大家一起学习!
网友评论