您的位置:首页 > 产品设计 > UI/UE

iOS UISearchController中 如何改变UISearchBar中取消按钮的颜色和字

2015-12-11 21:42 861 查看

iOS UISearchController中 如何改变UISearchBar中取消按钮的颜色和字

今天在做项目的时候想要自定义搜索栏中的取消按钮的显示文字为取消,字体颜色为白色,自己试了很多次都失败了,后来想在网上搜索答案,发现我找到的这些博客都是比较早的版本,就是一句话根本解决不了现在的问题。

#pragma mark -----------------搜索栏代理--------------------
-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{

//
修改UISearchBar右侧的取消按钮文字颜色及背景图片
for (id searchbuttonsin [searchBar
subviews])
if ([searchbuttons
isKindOfClass:[UIButton
class]]) {
UIButton *cancelButton = (UIButton*)searchbuttons;
//
修改文字颜色

[cancelButton setTitle:@"返回"forState:UIControlStateNormal];

[cancelButton setTitleColor:[UIColorwhiteColor]
forState:UIControlStateNormal];

[cancelButton setTitleColor:[UIColorwhiteColor]
forState:UIControlStateHighlighted];
}
}
后来自己debug看到这个循环只执行了一次,而且这个获取到的子视图正好是UIView(如下):



再去debug看视图的层级关系可以明显的看到在UISearchBar上有个UIView,而在UIView上有个UINavigationButton才是我们要找的cancel
button,很显然UINavigationButton是继承与UIButton的,所以在上述的循环中海的再加一层循环,或者干脆取出[searchBar subview]的第一个或者最后一个元素都行,后来经查证发现以上方法只支持iOS7.0以下的版本,iOS7.0以上的都多加了一层UIView(代码改为如下):

#pragma mark -----------------搜索栏代理--------------------
-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{

//
修改UISearchBar右侧的取消按钮文字颜色及背景图片
for (id
searchbuttonsin [[searchBarsubviews][0]subviews]) //只需在此处修改即可
if ([searchbuttons
isKindOfClass:[UIButton
class]]) {
UIButton *cancelButton = (UIButton*)searchbuttons;
//
修改文字颜色

[cancelButton setTitle:@"返回"forState:UIControlStateNormal];

[cancelButton setTitleColor:[UIColorwhiteColor]
forState:UIControlStateNormal];

[cancelButton setTitleColor:[UIColorwhiteColor]
forState:UIControlStateHighlighted];
}
}

那么接下来问题又来了运行后发现字是变成返回没错了,可是颜色并没有跟我们想象的一样变成白色的啊!!



后来更神奇的事情发生了,当我点击返回,再次点编辑框的时候返回两字居然奇迹般的变成白色的!!!!!!



又是一顿狂晕如千万只草泥马在我面前徘徊,试了多种办法,比如把设置代码放到搜索栏的其他代理方法中什么的,都没有什么卵用,后来我突然联想到UINavigationBar和UITabBar都有一个tintColor属性来设置上面按钮的颜色,抱着试一试的态度果断去UISearchBar头文件去找,果不其然就有这么一个属性!



二话不说赶紧去设置一下试试,将之前循环中的两个设置按钮字体颜色的代码注释掉,把设置UISearchController的代码中加上了

_searchC.searchBar.barTintColor = [UIColorwhiteColor];
结果真的就可以了!!!



希望可以帮到更多有类似困扰的读者们,相关的可以各种转载,转发;真的比较有用,想想自己怎么查都查不到真的很蛋疼!在此,我只想说虽然有时候网上找不到相关的解决方案,何不自己尝试的去解决呢,有时候多动脑多想问题解决后才会发现其实真没什么,也许一个很简单的问题就能难住我们,因为我们没有经历过。但是我始终相信,编程一定是见多识广的,多想多看多写代码绝对是新手进步最快的方法。想成为高级程序员没有捷径,都是一句句代码的累积沉淀而成的高级之路!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: