1. 程式人生 > >UISearchBar 修改文字框,cancel按鈕等的小技巧(5_0,7_0)

UISearchBar 修改文字框,cancel按鈕等的小技巧(5_0,7_0)

IOS中所有檢視都繼承了UIView,所以IOS的各種檢視控制元件其實都是蘋果內部寫好的.h,.m檔案,這樣叫系統自帶,當然我們也可以按照他們的邏輯和規則自己定義檢視控制元件,這叫自定義控制元件。 當然,每個控制元件都是自由繪製或者自由組裝,我們看UISearchBar ,他是一個搜尋控制元件,視覺上他的組成有文字輸入框,按鈕,背景等,大家不難想到,一個UISearchBar是由以下控制元件來組裝的

UISearchBar 的組成:

(IOS5) 我們以他的subviews來觀察吧,在XCode中列印 searchBar.subviews

(
    "<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>>"
)
從上面列印的結果看出IOS5中 UISearchBar 有四個子檢視組成,UISearchBarBackground(UIView), UISearchBarTextFiled(UITextFiled), UIView, UINavigationButton(UIButton) ,

根據上面的組成結構你就不難看出,想要修改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組成又不一樣了,但思想是一樣的。有空多研究蘋果的原始檔或者官方文件等。