iOS 修改UISearchBar cancel 按钮

Posted zhangdalang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 修改UISearchBar cancel 按钮相关的知识,希望对你有一定的参考价值。

修改UISearchBar cancel 按钮

最近做一个UISearchController的搜索功能,可是UISearchBar的取消按钮标题为“cancel”,想要修改为“取消”,参考了许多东西,大都是要遍历UISearchBar的子控件,找到类型为“UIButton”或子控件的父类是“UIButton”的子控件,通过UIButton的方法来修改它的标题或颜色。
例如:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar

    // ios 7.0+ for (id view in [self.subviews[0] subviews]) 
    // iOS 7.0- for (id view in self.subviews) 
    for (id view in [self.subviews[0] subviews]) 
        if ([view isKindOfClass:[UIButton class]]) 
            UIButton *button = (UIButton *)view;
            [button setTitle:title forState:UIControlStateNormal];
            break;
        
    

但这样不够完美,当App启动后第一次点击搜索框输入内容搜索时,“cancel”按钮的标题是不会改变的,只有取消后再次编辑才会改变。原因是在searchBarTextDidBeginEditing: 方法中执行修改的时候UISearchBar的子控件或子控件的子控件中还没有UIButton类型的控件,因为不好把握“cancel”按钮加入到searchBar中的时机,所以“cancel”按钮的修改不太完美。
后来查找了很多方法,发现两句代码就搞定了:

[[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTintColor:[UIColor whiteColor]];    
[[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTitle:@"取消"];

“cancel”按钮在searchBar中是”UINavigationButton”类型的,UINavigationButton的父类是UIButton。为什么UIBarButtonItem的appearance能够修改她还不知道。

以上是关于iOS 修改UISearchBar cancel 按钮的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 8 中更改 UISearchBar 取消按钮文本

UISearchBar 中的 CANCEL 需要很长时间

如何将UISearchBar上"Cancel"按钮改为”取消“?

更改 UISearchBar 内 CLEAR 按钮的 Tint 颜色 NOT CANCEL BUTTON

iOS开发之UISearchBar初探

自定义UISearchBar