使用Swift搜索结果后,Searchbar不会重新加载到原始数据吗?

时间:2019-02-09 06:33:23

标签: ios swift tableview uisearchbar

我的情况是,我为UISearchbar实现了代码库,并产生了animationexpand之类的collapse效果。

在这里,每当我尝试search添加自定义清除button后搜索结果显示良好,它将operate折叠动画,同时reload将搜索结果添加到{ {1}}表original

我的问题是,每当我单击自定义清除按钮data时,结果不会重新加载到search中的original数据中。

tableview

我的Tableview单元格

func didTapFavoritesBarButtonOFF() {

        self.navigationItem.setRightBarButtonItems([self.favoritesBarButtonOn], animated: false)
        print("Hide Searchbar")

        // Reload tableview 
        searchBar.text = nil
        searchBar.endEditing(true)
        filteredData.removeAll()
        self.tableView.reloadData() // not working

        // Dismiss keyboard
        searchBar.resignFirstResponder()

        // Enable navigation left bar buttons
        self.navigationItem.leftBarButtonItem?.isEnabled = false

        let isOpen = leftConstraint.isActive == true

        // Inactivating the left constraint closes the expandable header.
        leftConstraint.isActive = isOpen ? false : true

        // Animate change to visible.
        UIView.animate(withDuration: 1, animations: {
            self.navigationItem.titleView?.alpha = isOpen ? 0 : 1
            self.navigationItem.titleView?.layoutIfNeeded()
        })
    }

1 个答案:

答案 0 :(得分:1)

您需要将数据源数组设置为原始数组。

原因

实际上,您正在删除数据源数组filteredData.removeAll()。此后,数组为空,这是self.tableView.reloadData()无法正常工作的原因。

解决方案

您需要制作数据源数组的副本,假设originalData包含原始数据(不带过滤器)。

每当您使用过滤器时,都需要使用originalData来过滤数据。

例如。

let filterdData = originalData.filter { //filter data }

因此,当清除过滤器时,需要再次将原始数据设置为表数据源数组。

例如。

filteredData.removeAll() //remove all data
filterData = originalData //Some thing that you need to assign for table data source
self.tableView.reloadData()

在表的cellForRowAt:中将获得以下数据...

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

      var obj = filterData[indexPath.row] 
      print(obj)

 }

不要忘记在过滤器之前将数据分配给originalData