gpt4 book ai didi

swift - 调用 tableView.reloadData 时不调用 cellForRowAtIndexPath

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

我正在为带有搜索栏的表格 View 工作。当搜索文本更改时,我调用 tableView.reloadData 来制作有关搜索结果的单元格。但是,即使我调用 tableView.reloadData,也不会调用 cellForRowAtIndexPath。所以我没有关于搜索结果的任何单元格。

import UIKit

class RestaurantsViewController: UITableViewController,UISearchBarDelegate, UISearchResultsUpdating {

@IBOutlet weak var menuButton: UIBarButtonItem!

var restaurantsData = RestaurantsData()

override func viewDidLoad() {
super.viewDidLoad()

if self.revealViewController() != nil {
menuButton.target = self.revealViewController()
menuButton.action = #selector(SWRevealViewController.revealToggle(_:))
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
}

loadRestaurantsData()

searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
definesPresentationContext = true
tableView.tableHeaderView = searchController.searchBar
}

private func loadRestaurantsData() {
let 굽네치킨 = Restaurant(name: "굽네치킨", contact: "051-9196-0940", menus: ["고추바사삭":"20000원"])
let 천궁반점 = Restaurant(name: "천궁반점", contact: "051-2254-0940", menus: ["간짜장":"5000원"])
restaurantsData.addRestaurant("치킨", restaurant: 굽네치킨)
restaurantsData.addRestaurant("중식", restaurant: 천궁반점)
}

// MARK: - UITableViewDelegates

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
if searchController.active && searchController.searchBar.text != "" {
return 0
}
return restaurantsData.restaurantTypes.count
}

override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return restaurantsData.restaurantTypes[section]
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searchController.active && searchController.searchBar.text != "" {
return filteredRestaurants.count
}
return restaurantsData.restaurants[section].count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
let restaurant: Restaurant
print("\(searchController.active), \(self.searchController.searchBar.text != "")")
print(searchController.searchBar.text)
print(searchText)
print(2)
if searchController.active && searchText != "" {
restaurant = filteredRestaurants[indexPath.row]
print("searched")
} else {
restaurant = restaurantsData.restaurants[indexPath.section][indexPath.row]
}
cell.textLabel?.text = restaurant.name
return cell
}

// MARK: - UISearchBarDelegates

let searchController = UISearchController(searchResultsController: nil)
var searchText: String = ""
var filteredRestaurants = [Restaurant]() {
didSet { print(filteredRestaurants) }
}

func filterContentForSearchText(searchText: String, scope: String = "All") {
filteredRestaurants = restaurantsData.allRestaurants.filter { restaurant in
return restaurant.info.containsString(searchText.lowercaseString)
}
print("REloaded")

self.tableView.reloadData()
print(3)
}

func updateSearchResultsForSearchController(searchController: UISearchController) {
filterContentForSearchText(searchController.searchBar.text!)
searchText = searchController.searchBar.text!
print(1)
}

}

当我搜索时,filteredRestaurants 数组获取有关筛选研究的信息,但不会出现在搜索结果 TableView 中,因为未调用 cellForRowAtIndexPath。

最佳答案

当 searchController 在您的这部分代码中处于事件状态时,您将返回 0 部分的数量。

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
if searchController.active && searchController.searchBar.text != "" {
return 0
}
return restaurantsData.restaurantTypes.count
}

零部分是一个没有单元格的空表,这就是 cellForRowAtIndexPath 没有被调用的原因。

尝试将 return 0 替换为 return 1,这样表格就有一个部分可以显示您的搜索结果。

关于swift - 调用 tableView.reloadData 时不调用 cellForRowAtIndexPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39309039/

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