Как искать, когда кнопка поиска нажата на клавиатуре?

У меня есть панель поиска в заголовке моего табличного представления. Для этого я использую uisearchcontroler. Но он обновляет данные tablview, когда я переписываюсь в панели поиска, мне нужно обновить tablview, когда нажимается кнопка поиска на клавиатуре, потому что я получаю данные для поиска в API и каждый раз, когда я переписываюсь в строке поиска, это запрашивает, и это занимает много времени. Как я могу решить это?

var resultSearchController = UISearchController()
var indicator:UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
var ref=UIRefreshControl()
override func viewDidLoad() {
    super.viewDidLoad()


    self.resultSearchController = ({
        let controller = UISearchController(searchResultsController: nil)
        controller.searchResultsUpdater = self
        controller.dimsBackgroundDuringPresentation = false
        controller.searchBar.sizeToFit()

        self.tableView.tableHeaderView = controller.searchBar

        return controller
    })()

    indicator.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
    indicator.center = view.center
    view.addSubview(indicator)
    indicator.bringSubviewToFront(view)

    indicator.startAnimating()
    UIApplication.sharedApplication().networkActivityIndicatorVisible = true

    getRequests.getType1(tableView,spinner: indicator)

    ref.addTarget(self, action: #selector(Catalog1TableViewController.refresh(_:)), forControlEvents: UIControlEvents.ValueChanged)
    ref.attributedTitle = NSAttributedString(string: "Загрузка")
    tableView.addSubview(ref)

}


func updateSearchResultsForSearchController(searchController: UISearchController)
{
    indicator.startAnimating()
    UIApplication.sharedApplication().networkActivityIndicatorVisible = true
    tableView.reloadData()
    getRequests.getProduct(tableView, spinner: indicator,name: searchController.searchBar.text!)
    for item in getRequests.product {
        if item.productTitle.containsString(searchController.searchBar.text!){
            filteredTableData.append(item)
        }

    }
    tableView.reloadData()
}

2 ответа

Попробуйте реализовать метод UISearchBar Delegate:

func searchBarSearchButtonClicked(searchBar: UISearchBar)

Вы должны реализовать что-то подобное в вашем контроллере представления.

var resultSearchController = UISearchController()
resultSearchController.searchBar.delegate = self

extension ViewController: UISearchBarDelegate {
    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
        print("search button click")
    } 
}
Другие вопросы по тегам