Which event get called when we hit UISearchBar

For Swift 5.

func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
        handleShowSearchVC()
        return false
    }

    @objc func handleShowSearchVC() {
        let modalUserSearchController = UserSearchController(collectionViewLayout: UICollectionViewFlowLayout())
        modalUserSearchController.modalPresentationStyle = .overCurrentContext

        //Mini app panel.
        //vc.view.frame = CGRectMake(0, vc.view.frame.size.height - 120, vc.view.frame.size.width, 120)

        //Present #1
        // present(modalUserSearchController, animated: true, completion: nil)

        //Presentation #2
        navigationController?.pushViewController(modalUserSearchController, animated: true)
    }

I think calling [self ShowMySearch] in "searchBarTextDidBeginEditing" is a bit too late. I suppose that "searchBarTextDidBeginEditing" is called on response to the search bar becoming first responder. Since it is the first responder when the search controller is pushed, it probably become first responder again when your search controller is poped out...thus calling "searchBarTextDidBeginEditing" once again.

To achieve this, I'd use :

  • (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar

This method is called after the search bar is tapped but before it becomes the first responder. And if you return NO, it will never become the first responder :

- (BOOL)searchBarShouldBeginEditing:(UISearchBar*)searchBar {
    [self ShowMySearch];
    return NO;
}

Let me know if this works !