使用斯威夫特搜索栏不重装原始数据搜索结果后?

问题描述 投票:0回答:1

我的方案,我实现了代码库UISearchbar与像animationexpand一些collapse效果。

在这里,每当我试图search以及显示搜索结果后,我添加了自定义清楚buttonoperate合拢动画同时reload搜索结果originaldata

我的问题是,每当我点击自定义清除按钮search结果不重装在originaltableview数据。

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()
        })
    }

我泰伯维细胞

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return filteredData.count
 }

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

    let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier, for: indexPath) as! CustomTableViewCell
    cell.titleLabel.text = self.filteredData[indexPath.row]
    return cell
}
ios swift tableview uisearchbar
1个回答
1
投票

您需要将数据源阵列设置成原来的一个。

原因

其实你要删除的数据源阵列filteredData.removeAll()。在此之后的数组为空是self.tableView.reloadData()不工作的原因。

你需要让数据源数组的副本,可以说originalData包含原始数据(无过滤器)。

无论何时用户过滤器,那么你需要使用originalData来过滤数据。

对于EG。

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

所以,当你清晰过滤器您需要重新设置的原始数据表的数据源阵列。

对于EG。

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

© www.soinside.com 2019 - 2024. All rights reserved.