UISearchBar 修改文字框,cancel按鈕等的小技巧(5_0,7_0)
阿新 • • 發佈:2019-02-17
IOS中所有檢視都繼承了UIView,所以IOS的各種檢視控制元件其實都是蘋果內部寫好的.h,.m檔案,這樣叫系統自帶,當然我們也可以按照他們的邏輯和規則自己定義檢視控制元件,這叫自定義控制元件。 當然,每個控制元件都是自由繪製或者自由組裝,我們看UISearchBar ,他是一個搜尋控制元件,視覺上他的組成有文字輸入框,按鈕,背景等,大家不難想到,一個UISearchBar是由以下控制元件來組裝的
UISearchBar 的組成:
(IOS5) 我們以他的subviews來觀察吧,在XCode中列印 searchBar.subviews
從上面列印的結果看出IOS5中 UISearchBar 有四個子檢視組成,UISearchBarBackground(UIView), UISearchBarTextFiled(UITextFiled), UIView, UINavigationButton(UIButton) ,( "<UISearchBarBackground: 0xf6734c0; frame = (0 0; 320 44); userInteractionEnabled = NO; layer = <CALayer: 0xf673550>>", "<UISearchBarTextField: 0xf673940; frame = (5 6; 310 31); text = ''; clipsToBounds = YES; opaque = NO; layer = <CALayer: 0xf673eb0>>", "<UIImageView: 0xf673c90; frame = (0 -1; 320 1); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xf67f880>>", "<UIView: 0xf66edf0; frame = (0 43; 320 1); layer = <CALayer: 0xf685ef0>>", "<UINavigationButton: 0xf6d2e00; frame = (0 0; 48 30); opaque = NO; layer = <CALayer: 0xf6db330>>" )
根據上面的組成結構你就不難看出,想要修改UISearchBar,那對應修改組成他的檢視控制元件就行了,比如修改 搜尋框上的Cancel按鈕 ,思路是輪循出UISearchBar的子檢視,然後逐個修改獲得的檢視的屬性等。程式碼如下:
// 改變cannel按鈕的文字 ios 5.0, 6.0 for (UIView *subView in searchBar.subviews) { // 獲得UINavigationButton按鈕,也就是Cancel按鈕物件,並修改此按鈕的各項屬性 if ([subView isKindOfClass:[UIButton class]]) { UIButton *cannelButton = (UIButton*)subView; [cannelButton setTitle:@"取消" forState:UIControlStateNormal]; break; } } // 改變cannel按鈕的文字,7.0 UIView *subView0 = searchBar.subviews[0]; // IOS7.0中searchBar組成複雜點 if ([[[UIDevice currentDevice] systemVersion] floatValue]>=7.0) { for (UIView *subView in subView0.subviews) { // 獲得UINavigationButton按鈕,也就是Cancel按鈕物件,並修改此按鈕的各項屬性 if ([subView isKindOfClass:[UIButtonclass]]) { UIButton *cannelButton = (UIButton*)subView; [cannelButton setTitle:@"取消"forState:UIControlStateNormal]; [cannelButton setTintColor:[UIColorredColor]]; break; } } }
效果如下:
當然,IOS7下的UISearchBar組成又不一樣了,但思想是一樣的。有空多研究蘋果的原始檔或者官方文件等。