思路是獲取UISearchBar的子視圖,判斷他是否是輸入框(注意不要先入為主地認為是UITextField),最后修改背景色。至於UISearchBar的子視圖結構,在不同的iOS版本可能會不一樣,可通過遞歸地調用description方法獲知,具體可見鏈接http://blog.csdn.net/forestml2008/article/details/32914915
下面附上代碼:
1 - (void)setSearchTextFieldBackgroundColor:(UIColor *)backgroundColor 2 { 3 UIView *searchTextField = nil; 4 if (IsiOS7OrLater) { 5 // 經測試, 需要設置barTintColor后, 才能拿到UISearchBarTextField對象 6 self.barTintColor = [UIColor whiteColor]; 7 searchTextField = [[[self.subviews firstObject] subviews] lastObject]; 8 } else { // iOS6以下版本searchBar內部子視圖的結構不一樣 9 for (UIView *subView in self.subviews) { 10 if ([subView isKindOfClass:NSClassFromString(@"UISearchBarTextField")]) { 11 searchTextField = subView; 12 } 13 } 14 } 15 16 searchTextField.backgroundColor = backgroundColor; 17 }