Как искать в таблице, используя данные из API? - PullRequest
0 голосов
/ 24 марта 2019

Я создал Tableview, который показывает данные, вызываемые из API (я упоминаю об этом, потому что, возможно, моя проблема связана с reloadData ()).

Однако формат моих данных прост (структура), и я нашел ответ, который отвечает на мой вопрос здесь .

Но это не сработало для меня. Я не уверен почему. Мой код создается и ошибок нет, но когда я что-то ищу, ничего не происходит.

Вот как выглядит мой код:

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

Что я сделал не так?

1 Ответ

1 голос
/ 24 марта 2019

Установите свои делегаты и источник данных:

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