New default search bar focus text color added with Xcode 8.1 update, how to change it?

318 views Asked by At

Question:

How do I set the "focused" state of a UISearchBar text color from the default white, to black?

I created the search bar programmatically, see end of post for that code.

Description:

Previously I was using this extension to set the search bar color:

public extension UISearchBar {

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

}

Which worked great and is still working. However, search bars seem to be "focusable" in a sense. If they are focused, then the text color switches to white (which is the same as the search bar background color) making the text invisible.

Under my search bar I have a table view, where I populate it with data regarding what the person was searching.

When I focus any of the table cells, the UISearchBar text color goes to the black I had originally specified.

Programmatically created SearchBar

Called in AppDelegate.swift

func configueSearchController() -> UIViewController {

        let storyboard = UIStoryboard(name: "Search", bundle: nil)
        guard let searchResultsController = storyboard.instantiateViewController(withIdentifier: SearchViewController.storyboardIdentifier) as? SearchViewController else {
            fatalError("Unable to instatiate a SearchResultViewController from the storyboard.")
        }

        /*
         Create a UISearchController, passing the `searchResultsController` to
         use to display search results.
         */

        let searchController = UISearchController(searchResultsController: searchResultsController)
        searchController.searchResultsUpdater = searchResultsController
        searchController.searchBar.placeholder = NSLocalizedString("Enter keyword (e.g. Gastric Bypass)", comment: "")
        searchController.view.backgroundColor = Constants.Color.backgroundcolor
        searchController.searchBar.keyboardAppearance = UIKeyboardAppearance.dark
        searchController.searchBar.tintColor = Constants.Color.backgroundcolor
        searchController.searchBar.backgroundColor = Constants.Color.backgroundColorSearch
        searchController.searchBar.setTextColor(color: .black)
        searchController.hidesNavigationBarDuringPresentation = false
        searchController.obscuresBackgroundDuringPresentation = true
        searchController.searchBar.searchBarStyle = .minimal
        searchController.searchBar.sizeToFit()

        //searchResultsController.tableView.tableHeaderView = searchController.searchBar

        // Contain the `UISearchController` in a `UISearchContainerViewController`.
        let searchContainer: UISearchContainerViewController = UISearchContainerViewController(searchController: searchController)

        // Finally contain the `UISearchContainerViewController` in a `UINavigationController`.
        let searchNavigationController = UINavigationController(rootViewController: searchContainer)
        searchNavigationController.navigationBar.isTranslucent = true
        searchNavigationController.navigationBar.tintColor = Constants.Color.backgroundcolor
        searchNavigationController.tabBarItem.title = "Search"
        return searchNavigationController

    }
0

There are 0 answers