iOS 11系统 UISearchBar 修改CancelButton 样式

本期需求要讲UISearchBar 的颜色由系统默认的灰色修改成跟app整体统一风格的红色,搜索框上的cancelButton的title设置成白色

原来的搜索框


IMG_2915.PNG

背景颜色修改的方法比较简单

searchBar.backgroundColor = [UIColor redcolor];

但是在修改searchBar的cancelButton 标题上的颜色时,有如下三种方案:

方案1:

大部分都是通过遍历视图的方式,查找cancelButton

//设置searchBar取消按钮  
UIView *subVie = [searchbar superview];  
for (id vie in [subVie subviews]) {  
    if ([vie isKindOfClass:[UIButton class]]) {  
       UIButton *btn = (UIButton *)vie;  
       [btn setTitle:@"取消" forState:UIControlStateNormal];  
    }  
}  

然而在iOS11系统上,此类方法并没有获取cancelButton

方案2:

还有一种常见的方法就是设置searchbar的tintcolor,如下:

searchBar.tintColor  = [UIColor whiteColor];

虽然可以改变cancelButton的title颜色,但是搜索框中的光标也会变成白色,无法辨识。

方案3:

然后我就在stack overflow 找到了解决方法:

  //设置取消按钮的title颜色为白色
    [[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTintColor:[UIColor whiteColor]];

修改之后的效果:


IMG_0042.PNG

你可能感兴趣的:(iOS 11系统 UISearchBar 修改CancelButton 样式)