Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change UISearchBar textColor not working

I am using google places API for autoComplete widget. I am showing the full screen control in ios 9+ using swift. I am adding a full control as given in the docs.

I have added the code as shown in the docs. Now I want to change the searchBar text color to whiteColor.

So I tried this

UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).textColor = UIColor.whiteColor()

But I am not getting the desired behaviour. Below is the screenshot

**enter image description here**

This has been given in Docs

https://developers.google.com/places/ios-api/autocomplete#use_a_table_data_source

But this is not working. I need help with regarding to this.

like image 633
Ranjit Avatar asked Jun 11 '16 11:06

Ranjit


4 Answers

You need to create an extension like follwoing:

public extension UISearchBar {

    public func setNewcolor(color: UIColor) {
        let clrChange = subviews.flatMap { $0.subviews }
        guard let sc = (clrChange.filter { $0 is UITextField }).first as? UITextField else { return }
        sc.textColor = color
    }
}

And change color using following code:

 controller.searchBar.setNewcolor(UIColor.redColor())

Output is :

enter image description here

Update:

For the change color of searchBar text for the GMSAutocompleteViewController you need to do following code:

let searchBarTextAttributes: [String : AnyObject] = [NSForegroundColorAttributeName: UIColor.redColor(), NSFontAttributeName: UIFont.systemFontOfSize(UIFont.systemFontSize())]
UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).defaultTextAttributes = searchBarTextAttributes

That change the text out put like following image:

enter image description here

And if you wish to change placeholder text and it's color for searchBar. You need to do following code:

let placeholderAttributes: [String : AnyObject] = [NSForegroundColorAttributeName: UIColor.whiteColor(), NSFontAttributeName: UIFont.systemFontOfSize(UIFont.systemFontSize())]

let attributedPlaceholder: NSAttributedString = NSAttributedString(string: "Find a place", attributes: placeholderAttributes)
UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).attributedPlaceholder = attributedPlaceholder

It will be show like:

enter image description here

like image 172
Nitin Gohel Avatar answered Sep 27 '22 23:09

Nitin Gohel


Use Bellow code for Swift 3

if #available(iOS 9.0, *) {
  UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSForegroundColorAttributeName: UIColor.green]
  } else {
  // Fallback on earlier versions
}

Hope this helps.

like image 25
Shoaib Bagwan Avatar answered Sep 27 '22 23:09

Shoaib Bagwan


For swift 4 ios 12

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes
            .updateValue(UIColor.white, forKey: NSAttributedStringKey.foregroundColor.rawValue)
like image 20
Nahit Rüştü Heper Avatar answered Sep 27 '22 23:09

Nahit Rüştü Heper


You can use UIAppearance protocol to get the appearance proxy for a class which is available in iOS 5.0 and later.

There are actually two ways to customize appearance for objects and to get the appearance proxy for the class.

  • To customize the appearance of all instances of a class, use appearance.
  • To customize the appearances for instances of a class when contained within an instance of a container class, or instances in a hierarchy, use appearanceWhenContainedIn.

You can apply this sample code:

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:@{NSForegroundColorAttributeName:[UIColor redColor]}];

You can also try another option given in this SO post - UISearchBar text color change in iOS 7.

I hope that covers your issue. Happy coding!

like image 29
Teyam Avatar answered Sep 28 '22 00:09

Teyam