Ariel Gemilang
Ariel Gemilang

Reputation: 791

Make Cancel button in search bar active after search button tapped

I have search bar and cancel button, after search button tapped, it display the result but cancel button is inactive and i need to click twice to make it work and back to the initial result. How to make cancel button active after the search result appear?

here's my code

func searchBarSearchButtonClicked(searchBar: UISearchBar) {
    searchBar.endEditing(true)
    searchBar.setShowsCancelButton(true, animated: true)
    filterContentForSearchText(searchBar.text!, scope: "All")
    print(searchBar.text)
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
    searchBar.text = ""
    searchBar.resignFirstResponder()
    searchBar.setShowsCancelButton(false, animated: true)
    database = dataUtuh
    self.collectionView.reloadData()
}

I already implement UISearchBarDelegate and searchBar.delegate = self on my viewDidLoad

Upvotes: 4

Views: 5209

Answers (2)

Andolasoft Inc
Andolasoft Inc

Reputation: 1296

Put the code to enable the cancel button in search bar's searchBarSearchButtonClicked delegate method In this way after the search bar will be clicked the cancel button will be still enabled.

so the complete code snippet would be

func searchBarSearchButtonClicked(searchBar: UISearchBar) {
    searchBar.endEditing(true)
    searchBar.setShowsCancelButton(true, animated: true)
    print(searchBar.text)


    for view in searchBar.subviews {
        for subview in view.subviews {
            if let button = subview as? UIButton {
                button.enabled = true
            }
        }
    }

}

Happy coding...

Upvotes: 5

Tj3n
Tj3n

Reputation: 9923

In my experience if you do searchBar.endEditing(true) then the cancel button is disabled, try adding this after that to see if its work, im also using it in my project:

func enableCancelButton (searchBar : UISearchBar) {
    for view1 in searchBar.subviews {
        for view2 in view1.subviews {
            if view2.isKindOfClass(UIButton) {
                let button = view2 as! UIButton
                button.enabled = true
                button.userInteractionEnabled = true
            }
        }
    }
}

Upvotes: 4

Related Questions