UISearchBar: changing background color of input field
I'm trying to change the background color of input field of UISearchBar.It's the rounded view where you input text to search, the default color is white. I would like to change it to gray
I tried:
for (UIView *subV开发者_C百科iew in searchBar.subviews) {
if ([subView isKindOfClass:NSClassFromString(@"UITextField")]) {
UITextField *textField = (UITextField *)subView;
[textField setBackgroundColor:[UIColor grayColor]];
}
But it doesn't work :(
I also tried to insert an image view to TextField but it seems the rounded view is separate from TextField. So, any clues?
=)
for (UIView *subView in _searchBar.subviews) {
for(id field in subView.subviews){
if ([field isKindOfClass:[UITextField class]]) {
UITextField *textField = (UITextField *)field;
[textField setBackgroundColor:[UIColor grayColor]];
}
}
}
Look at the function :
[searchBar setSearchFieldBackgroundImage:[UIImage imageNamed:@"search_bar"] forState:UIControlStateNormal];
In Swift 2 and iOS 9 you can call:
UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).backgroundColor = UIColor.darkGrey()
Swift 3:
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).backgroundColor = UIColor.darkGrey()
Solution in Swift 3:
if let txfSearchField = searchController.searchBar.value(forKey: "_searchField") as? UITextField {
txfSearchField.borderStyle = .none
txfSearchField.backgroundColor = .lightGray
}
Take the extension worked in swift4:
extension UISearchBar {
var input : UITextField? {
return findInputInSubviews(of: self)
}
func findInputInSubviews(of view: UIView) -> UITextField? {
guard view.subviews.count > 0 else { return nil }
for v in view.subviews {
if v.isKind(of: UITextField.self) {
return v as? UITextField
}
let sv = findInputInSubviews(of: v)
if sv != nil { return sv }
}
return nil
}
}
usage:
searchBar?.input?.layer.borderColor = color.cgColor
精彩评论