【问题标题】:How to search tableview using data from API?如何使用 API 中的数据搜索 tableview?
【发布时间】:2019-08-14 17:36:41
【问题描述】:

我已经构建了一个 Tableview 来显示从 API 调用的数据(我提到这一点是因为我的问题可能是由于 reloadData())。

但是,我的数据格式很简单(一个结构),我找到了一个答案来解决我的问题here

但这对我不起作用。我不确定为什么。我的代码已构建并且没有错误,但是当我搜索某些内容时,什么也没有发生。

我的代码如下所示:

import UIKit

class UsersViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var searchBar: UISearchBar!
    @IBOutlet weak var dataTableView: UITableView!

    var userData: [User] = [
        User(name: "name1", email: "email1", age: 25),
        User(name: "name2", email: "email2", age: 25),
        User(name: "name3", email: "email3", age: 25)
    ]

    var searchedUser = [User]()
    var searchActive = false

    override func viewDidLoad() {
        super.viewDidLoad()

    }


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

        let cell = dataTableView.dequeueReusableCell(withIdentifier: "userCell", for: indexPath) as! UsersTableViewCell

        if searchActive {
            cell.userName.text = self.searchedUser[indexPath.row].name // Maybe my error is that I'm just searching for their usernames, but that's what I want
        } else {
            cell.userName.text = self.userData[indexPath.row].name
        }

        return cell
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if searchActive {
            return  self.searchedUser.count
        } else {
            return  self.userData.count
        }

    }

}

extension UsersViewController: UISearchBarDelegate {
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        searchedUser = userData.filter{(user) -> Bool in
            return user.name.range(of: searchText, options: [ .caseInsensitive ]) != nil
        }

        searchActive = true

        self.dataTableView.reloadData()
    }
}

我做错了什么?

【问题讨论】:

  • 您连接代表了吗? dataTableView.delegate = self; dataTableView.dataSource = self; searchBar.delegate = self;
  • 是否调用了返回函数?并且您是否为 TableView 设置了委托和数据源?
  • 谢谢!委托和数据源是缺失的。但是现在,在我搜索之后,我得到了一张空桌子。清空搜索栏后如何返回满桌?
  • 将 searchActive 设置为 false

标签: ios swift xcode uitableview uisearchbar


【解决方案1】:

设置您的委托和数据源:

override func viewDidLoad() {
  super.viewDidLoad()
  dataTableView.delegate = self 
  dataTableView.dataSource = self 
  searchBar.delegate = self
}

【讨论】:

  • 这行得通!谢谢。但是现在经过搜索,我的桌子是空的。我尝试在拉动刷新方法中将 searchActive 设置为 false,但这没有用。我应该在哪里做?
  • searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)里面可以查看if searchText == "" { searchActive = false self.dataTableView.reloadData() }
  • 哦等等。我的搜索结果显示了两次(几乎就像是循环通过 searchedUser 两次)。你知道这是怎么发生的吗?
  • 也许在searchedUser = userData.filter 之前清除searchedUser 让我知道这是否有效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 2018-12-10
相关资源
最近更新 更多