【发布时间】:2023-04-03 20:28:01
【问题描述】:
我有一个User 模型,它从数据库中下载所有用户,将它们存储在users 数组中并在UITableView 中显示它们。在UITableView 上方,我有一个UISearchBar 以允许用户过滤它们。
搜索有效,但用户有一个usernames_lowercase 和一个displayName,我希望能够过滤users 数组,对于usernames_lowercase 和displayName,将其存储在@987654331 @array 然后重新加载/显示结果。我无法弄清楚如何做到这一点......如果它甚至可以用这样的单个数组来做到这一点。
StartNewMessage: UITableViewDelegate, UITableViewDataSource {
var users = [UserModel]()
var searchUsers = [UserModel]()
var searching = false
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searching {
return searchUsers.count
}
else {
return users.count
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "UsersChatTVCell") as! UsersChatTVCell
if searching {
let searchUser = searchUsers[indexPath.row]
cell.user = searchUser
}
else {
let user = users[indexPath.row]
cell.user = user
}
return cell
}
}
extension StartNewMessage: UISearchBarDelegate {
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
let trimmedSearchWord = searchText.trimmingCharacters(in: CharacterSet.punctuationCharacters)
searchUsers = users.filter({ $0.username_lowercase!.prefix(searchText.count) == trimmedSearchWord.lowercased()})
searchUsers = users.filter({ $0.displayName!.prefix(searchText.count) == searchText}) // doesn't work, basically rewrites the data
print(searchText.lowercased())
searching = true
tableView.reloadData()
}
}
【问题讨论】:
标签: arrays swift uitableview uisearchbar