gpt4 book ai didi

swift - UISearchBar 不在 TableView 中查找信息

转载 作者:行者123 更新时间:2023-11-28 11:31:53 25 4
gpt4 key购买 nike

我尝试从 firebase 获取数据并显示在 tableView 中。一切都很好。但我需要使用 UISearchBar 在 tableView 中进行搜索。我应该解决两个问题。

1) 当我开始输入时,我的 tableView 消失了。里面的所有信息都没有显示

2) 当我删除 UISearchBar 中的所有内容时,什么也没有出现。

import UIKit
import SPStorkController
import Firebase

class FoodViewController: UIViewController {

override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
let tableView = UITableView()
var foods = [FoodModel]()
var searchedFoods = [String]()
var searching = false

override func viewDidLoad() {
super.viewDidLoad()

fetchFoods()

self.modalPresentationCapturesStatusBarAppearance = true
self.view.backgroundColor = UIColor.white
let controller = UIViewController()

self.tableView.delegate = self
self.tableView.dataSource = self
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")

self.view.addSubview(self.tableView)

tableView.delegate = self
tableView.dataSource = self

let searchBar = UISearchBar(frame: CGRect(x: 0, y: 5, width: 350, height: 40))
searchBar.searchBarStyle = .minimal
searchBar.delegate = self

self.view.addSubview(searchBar)
}

override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
self.updateLayout(with: self.view.frame.size)
}

func updateLayout(with size: CGSize) {
self.tableView.frame = CGRect.init(x: 0, y: 45, width: size.width, height: 400)
}

func fetchFoods() {
Database.database().reference().child("food").observe(.childAdded) { (snapshot) in
if let dict = snapshot.value as? [String: AnyObject] {
let newTitle = dict["title"] as! String
let exCell = FoodModel(title: newTitle)
self.foods.append(exCell)
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
}
}
}

extension FoodViewController: UITableViewDataSource {

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

if searching {
cell.textLabel?.text = searchedFoods[indexPath.row]
} else {
let food = foods[indexPath.item]
cell.textLabel?.text = food.title
}
return cell
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searching {
return searchedFoods.count
} else {
return foods.count
}
}

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
}
}

extension FoodViewController: UITableViewDelegate {

func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView == self.tableView {
SPStorkController.scrollViewDidScroll(scrollView)
}
}
}

extension FoodViewController: UISearchBarDelegate {

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
//searchedFoods = foods.filter({$0.lowercased().prefix(searchText.count) == searchText.lowercased()})
searching = true
tableView.reloadData()
}

func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
searching = false
searchBar.text = ""
tableView.reloadData()
}
}`

这是我的模型

class FoodModel {

var title = String()

init (title: String) {

self.title = title
}
}

最佳答案

searchedFoods 应该是一个对象数组,与主食物列表相同。

我认为你只需要更新你的过滤

所以将 searchedFoods 更改为 [FoodModel]()

然后将过滤器更改为:

searchedFoods = foods.filter({ $0.title.lowercased().prefix(searchText.count) == searchText.lowercased() })

关于swift - UISearchBar 不在 TableView 中查找信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56489343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com