iOS中UISearchBar(搜索框)使用(二)設置內(nèi)部視圖屬性

1. 循環(huán)的方法

UISearchBar--改變內(nèi)部輸入框的背景顏色

思路是獲取UISearchBar的子視圖,判斷他是否是輸入框(注意不要先入為主地認為是UITextField),最后修改背景色。至于UISearchBar的子視圖結(jié)構,在不同的iOS版本可能會不一樣,可通過遞歸地調(diào)用description方法獲知,具體可見鏈接http://blog.csdn.net/forestml2008/article/details/32914915

- (void)setSearchTextFieldBackgroundColor:(UIColor *)backgroundColor
{
    UIView *searchTextField = nil;
    if (IsiOS7OrLater) {
         // 經(jīng)測試, 需要設置barTintColor后, 才能拿到UISearchBarTextField對象
         self.barTintColor = [UIColor whiteColor];
         searchTextField = [[[self.subviews firstObject] subviews] lastObject];
     } else { // iOS6以下版本searchBar內(nèi)部子視圖的結(jié)構不一樣
         for (UIView *subView in self.subviews) {
            if ([subView isKindOfClass:NSClassFromString(@"UISearchBarTextField")]) {
                 searchTextField = subView;
             }
         }
     }

     searchTextField.backgroundColor = backgroundColor;
}

2. KVC方法,使用KVC自定義UISearchBar外觀

在開發(fā)中,我們往往需要根據(jù)項目的風格來改變UISearchBar的外觀,通過繼承的方式,我們可以完全定制符合項目風格的外觀,然而有些情況下我們很難短時間內(nèi)完成全部的外觀定制工作,譬如我們項目用的好幾個舊框架,代碼中充斥著各種寫好的UISearchBar的展示,而改動底層框架并不是一個較好地實踐。于是我開始搜索并總結(jié)出了幾個不通過繼承的方式來更改UISearchBar外觀的方法。

獲取子view
我們在UISearchController或者是UISearchDisplayController中都可以直接獲取到UISearchBar的實例,我們可以從這里改變一些UISearchBar的屬性來改變外觀顯示。同時我們也可以直接獲取UISearchBar的subViews,UISearchBar的subView是一個UIView的實例,這個UIView包含了所有在UISearchBar上可以展示的子視圖,iOS SDK提供的UISearchBar,在iOS7之前是分為UISearchBarBackground、UISearchBarTextField、UIButton這幾個類的實例組成,而在iOS7之后,是將UIButton轉(zhuǎn)換為了UINavigationButton的實例。

1.我們可以通過循環(huán)遍歷出UISearchBar上所有展示出來的子視圖
for(UIView*viewin[[[_searchController.searchBar subviews]lastObject]subviews] ) {

if([viewisKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {}
if([viewisKindOfClass:NSClassFromString(@"UISearchBarTextField")]) {}
if([viewisKindOfClass:NSClassFromString(@"UINavigationButton")]) {}
}
2.通過KVC獲取子視圖

UIView*backgroundView = [_searchController.searchBar valueForKey:@"_background"];

UITextField *searchField = [_searchController.searchBar valueForKey:@"_searchField"];

UIButton*cancelButton = [_searchController.searchBar valueForKey:@"_cancelButton"];
3.//當我們獲取cancelButton時,一定要確保cancelButton包含在了UISearchBar中,必要時可以提前調(diào)用:
[_searchController.searchBar setShowsCancelButton:YES animated:NO];
4.去掉搜索框背景
for(UIView*viewin[[[_searchController.searchBar subviews]lastObject]subviews] ) {
    if([viewisKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
        [view removeFromSuperview];
    }
}
5.去掉搜索框邊框
[_searchController.searchBar setBackgroundImage:[UIImage new]];
6.改變輸入框文本
//提示文本顏色

UITextField*searchField = [_searchController.searchBar valueForKey:@"_searchField"];

[searchFieldsetTextColor:[UIColorblackColor]];

[searchFieldsetValue:[UIColorgrayColor]forKeyPath:@"_placeholderLabel.textColor"];

[searchFieldsetFont:[UIFontsystemFontOfSize:14]];

[searchFieldsetBackgroundColor:[UIColorwhiteColor]];
7. 改變?nèi)∠粹o的title
UIButton*cancelButton = [_searchController.searchBar valueForKey:@"_cancelButton"];

[cancelButtonsetTitle:@"Close"forState:UIControlStateNormal];
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容