Я создал 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()
}
}
Что я сделал не так?