table 视图中的搜索栏失败
Search bar in table view fails
我的搜索栏有问题。我正在尝试使用搜索栏在 table 视图中进行搜索,但是当我输入内容时,它什么也没有显示,在我删除所有内容后,我尝试搜索的所有餐厅都消失了。
这是我正在使用的代码。生病post只需要
extension HomeViewController: UISearchBarDelegate{
//MARK: Search bar
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
filteredData = []
if searchText == "" {
filteredData = datas
}
else {
for restaurante in datas{
if restaurante.title.lowercased().contains(searchText.lowercased())
{
filteredData.append(restaurante)
}
}
}
self.homeTableView.reloadData()
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { // Dispare tastatura cand apasam pe search
searchBar.resignFirstResponder()
}
}
这是变量:
struct Category {
let title: String
let photoKeyHome: String
}
let datas: [Category] = []
var filteredData: [Category]!
override func viewDidLoad() {
super.viewDidLoad()
filteredData = datas
}
这是我的 table 观点。也许我在这里做错了。
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filteredData.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = homeTableView.dequeueReusableCell(withIdentifier: "homeTableViewCell", for: indexPath) as! homeTableViewCell
let restaurant = filteredData[indexPath.row]
let storageRef = Storage.storage().reference()
let photoRef = storageRef.child(restaurant.photoKeyHome)
cell.myLabel.text = restaurant.title
cell.myImage.sd_setImage(with: photoRef)
对于数据,我正在使用 Firestore 和 Firebase 存储。
这就是我从 Firestore 获取数据的方式。
func getDatabaseRecords() {
let db = Firestore.firestore()
// Empty the array
filteredData = []
db.collection("HomeTableViewRestuarants").getDocuments { (snapshot, error) in
if let error = error {
print(error)
return
} else {
for document in snapshot!.documents {
let data = document.data()
let newEntry = Category(
title: data["title"] as! String,
photoKeyHome: data["photoKeyHome"] as! String
)
self.filteredData
.append(newEntry)
}
}
DispatchQueue.main.async {
self.homeTableView.reloadData()
}
}
}
TableView
After tried to search
after I deleted what I searched
如评论中所述,datas
从未设置过。在 getDatabaseRecords
中替换
DispatchQueue.main.async {
self.homeTableView.reloadData()
}
和
DispatchQueue.main.async {
self.datas = self.filteredData
self.homeTableView.reloadData()
}
顺便说一下,您的 textDidChange
方法效率很低。替换为
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.isEmpty {
filteredData = datas
} else {
filteredData = datas.filter{ [=12=].title.range(of: searchText, options: .caseInsensitive) != nil }
}
self.homeTableView.reloadData()
}
我的搜索栏有问题。我正在尝试使用搜索栏在 table 视图中进行搜索,但是当我输入内容时,它什么也没有显示,在我删除所有内容后,我尝试搜索的所有餐厅都消失了。
这是我正在使用的代码。生病post只需要
extension HomeViewController: UISearchBarDelegate{
//MARK: Search bar
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
filteredData = []
if searchText == "" {
filteredData = datas
}
else {
for restaurante in datas{
if restaurante.title.lowercased().contains(searchText.lowercased())
{
filteredData.append(restaurante)
}
}
}
self.homeTableView.reloadData()
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { // Dispare tastatura cand apasam pe search
searchBar.resignFirstResponder()
}
}
这是变量:
struct Category {
let title: String
let photoKeyHome: String
}
let datas: [Category] = []
var filteredData: [Category]!
override func viewDidLoad() {
super.viewDidLoad()
filteredData = datas
}
这是我的 table 观点。也许我在这里做错了。
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filteredData.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = homeTableView.dequeueReusableCell(withIdentifier: "homeTableViewCell", for: indexPath) as! homeTableViewCell
let restaurant = filteredData[indexPath.row]
let storageRef = Storage.storage().reference()
let photoRef = storageRef.child(restaurant.photoKeyHome)
cell.myLabel.text = restaurant.title
cell.myImage.sd_setImage(with: photoRef)
对于数据,我正在使用 Firestore 和 Firebase 存储。 这就是我从 Firestore 获取数据的方式。
func getDatabaseRecords() {
let db = Firestore.firestore()
// Empty the array
filteredData = []
db.collection("HomeTableViewRestuarants").getDocuments { (snapshot, error) in
if let error = error {
print(error)
return
} else {
for document in snapshot!.documents {
let data = document.data()
let newEntry = Category(
title: data["title"] as! String,
photoKeyHome: data["photoKeyHome"] as! String
)
self.filteredData
.append(newEntry)
}
}
DispatchQueue.main.async {
self.homeTableView.reloadData()
}
}
}
TableView After tried to search
after I deleted what I searched
如评论中所述,datas
从未设置过。在 getDatabaseRecords
中替换
DispatchQueue.main.async {
self.homeTableView.reloadData()
}
和
DispatchQueue.main.async {
self.datas = self.filteredData
self.homeTableView.reloadData()
}
顺便说一下,您的 textDidChange
方法效率很低。替换为
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.isEmpty {
filteredData = datas
} else {
filteredData = datas.filter{ [=12=].title.range(of: searchText, options: .caseInsensitive) != nil }
}
self.homeTableView.reloadData()
}