7

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 *subView 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?

2
  • u should create searchbar in code not in interfacebuilder.i had same issue while create from IB.so use code to create searchbar Commented Aug 29, 2011 at 10:58
  • AHHHH, I did it! I set the textField.background with an image and it worked, yay! Commented Aug 30, 2011 at 5:00

5 Answers 5

11

=)

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]]; } } } 
Sign up to request clarification or add additional context in comments.

Comments

7

Look at the function :

[searchBar setSearchFieldBackgroundImage:[UIImage imageNamed:@"search_bar"] forState:UIControlStateNormal]; 

Comments

3

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() 

1 Comment

As @enreas mentioned, the solution is hence: stackoverflow.com/a/42626728/2229062
3

Solution in Swift 3:

if let txfSearchField = searchController.searchBar.value(forKey: "_searchField") as? UITextField { txfSearchField.borderStyle = .none txfSearchField.backgroundColor = .lightGray } 

Comments

0

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 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.