Swift 3:按下searchBar,搜索自动删除

时间:2017-08-08 14:37:00

标签: swift uinavigationcontroller uisearchbar

在UITable的导航栏中配置了一个搜索器。一切都运行正常,接受这样的事实:当我搜索并找到所需的单元格并且我想点击该单元格时,搜索词会很快从搜索栏中删除。结果是我找回了“旧”表。我无法使用搜索结果。

Class property: UITableViewController, ExpandableHeaderViewDelegate, UISearchBarDelegate, UISearchResultsUpdating {

    var filteredArray = [Mijnproducten]()
    var shouldShowSearchResults = false

override func viewDidLoad() {
        super.viewDidLoad()


         configureSearchController()

        }

    func configureSearchController() {
        // Initialize and perform a minimum configuration to the search controller.
        searchController.searchResultsUpdater = self
        searchController.dimsBackgroundDuringPresentation = true
        searchController.searchBar.placeholder = "Search here..."
        searchController.searchBar.sizeToFit()
        searchController.hidesNavigationBarDuringPresentation = false

        // Place the search bar view to the tableview headerview.
        self.navigationItem.titleView = searchController.searchBar
    }


    func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
        shouldShowSearchResults = true
        searchWasCancelled = false
        self.tableView.reloadData()
    }

    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
        shouldShowSearchResults = false
        searchWasCancelled = true
        self.tableView.reloadData()

    }

    func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
        var searchTerm = ""

        if searchWasCancelled {
            searchController.searchBar.text = searchTerm
        }
        else {
            searchTerm = searchController.searchBar.text!
        }
    }

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
        let text = searchController.searchBar.text
        searchController.searchBar.text = text
        if !shouldShowSearchResults {
            shouldShowSearchResults = false
            self.tableView.reloadData()
        }

        searchController.searchBar.resignFirstResponder()
    }

    func updateSearchResults(for searchController: UISearchController) {

        let searchtext = searchController.searchBar.text
        print(searchtext)

        filteredArray = mijnproducten01.filter{ product in
            return product.productname.lowercased().contains((searchtext?.lowercased())!)
        }
        print(filteredArray)

        if searchtext?.isEmpty == false
        { shouldShowSearchResults = true }
        else
        { shouldShowSearchResults = false }

        // Reload the tableview.
        self.tableView.reloadData()
        }

    }

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

      let indexPath = tableView.indexPathForSelectedRow
      let currentCell = tableView.cellForRow(at: indexPath!) as! RowTableViewCell
      let RowName = currentCell.ProductLine!.text
      let temp = currentCell.UUID!.text
        print("jaaaa", temp)
      TAGID = Int(temp!)!


        if RowName == "History"
        {
            tableView.deselectRow(at: indexPath!, animated: true)
            self.performSegue(withIdentifier: "PropertyToHistory", sender: self)
        }
        else if RowName == "Description"
        {
            tableView.deselectRow(at: indexPath!, animated: true)
            self.performSegue(withIdentifier: "PropertyToDescription", sender: self)
        }
        else if RowName == "Transfer"
        {
            tableView.deselectRow(at: indexPath!, animated: true)
            self.performSegue(withIdentifier: "PropertyToTransfer", sender: self)
        }
     }

1 个答案:

答案 0 :(得分:0)

我建议您在searchBarTextDidBeginEditingsearchBarCancelButtonClickedsearchBarTextDidEndEditingsearchBarSearchButtonClickedupdateSearchResults上添加断点。 当您选择单元格并且搜索结果消失时,请查看断点停止的位置。

shouldShowSearchResultssearchWasCancelled似乎存在逻辑问题。

因为你所说的是正确的,所以你的searchController.searchBar.resignFirstResponder()会以某种方式触发,从而取消搜索。提出断点和调试器会让你成为罪魁祸首。