好的,所以我创建了一个包含7个类别All,A,B,C,D,E,F的plist。每个类别都有一个项目列表。现在我尝试使用分段控件,这样如果用户点击A,它会显示tableview上A类别中列出的所有项目。
到目前为止,我的代码看起来像是为了获取列出的项目:
override func viewDidLoad() {
super.viewDidLoad()
// Setup the Search Controller
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search Summons"
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
definesPresentationContext = true
// Setup the Scope Bar
searchController.searchBar.scopeButtonTitles = ["All", "A", "B", "C", "D", "E", "F"]
searchController.searchBar.delegate = self
// Setup the search footer
tableView.tableFooterView = searchFooter
if let splitViewController = splitViewController {
let controllers = splitViewController.viewControllers
detailViewController = (controllers[controllers.count-1] as! UINavigationController).topViewController as? DetailViewController
}
//Load Plist File
let path = Bundle.main.path(forResource:"Summonses", ofType: "plist")
let dics = NSArray.init(contentsOf: URL.init(fileURLWithPath:path!)) as! [NSDictionary]
self.originalData = dics.map{Summonses.init(category: $0["category"] as! String, price: $0["price"] as! String, description: $0["description"] as! String, accusatory: $0["accusatory"] as! String, name: $0["name"] as! String, info: $0["info"] as! String)}
self.filteredData = self.originalData
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if isFiltering() {
searchFooter.setIsFilteringToShow(filteredItemCount: filteredData.count, of: originalData.count)
return filteredData.count
}
switch (Controller.selectedSegmentIndex){
case 0:
return filteredData.count
case 1:
//Not exactly sure what to put in this section to count for the items in category A
//return filteredData.category["A"].count <--- something like that
default:
break
}
就像在我的范围搜索栏上它做到了但我似乎无法使用分段控件。传票的类别包含字符串“All”,“A”,“B”,“C”,“D”,“E”,“F”,我只想让用户在表格视图中显示点击A类中的所有项目都显示出来。我对顶部的代码发表评论我不确定在该位置放置什么样的代码来计算其类别中包含A的所有项目。
答案 0 :(得分:0)
请使用以下代码使用段索引加载所有类别。根据您的要求更改cellForRowAt indexPath。
struct Summonses {
var category:String
var price:String
var description:String
var accusatory:String
var name :String
var info:String
}
class CategoryViewController: UITableViewController,UISearchResultsUpdating ,UISearchBarDelegate{
let searchController = UISearchController(searchResultsController: nil)
let categories = ["All", "A", "B", "C", "D", "E", "F"]
var originalData = [Summonses]()
var filteredData = [Summonses]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search Summons"
if #available(iOS 11.0, *) {
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
}
definesPresentationContext = true
// Setup the Scope Bar
searchController.searchBar.scopeButtonTitles = categories
searchController.searchBar.delegate = self
let path = Bundle.main.path(forResource:"Summonses", ofType: "plist")
let dics = NSArray.init(contentsOf: URL.init(fileURLWithPath:path!)) as! [NSDictionary]
self.originalData = dics.map{Summonses.init(category: $0["category"] as! String, price: String(describing: $0["price"]), description: $0["description"] as! String, accusatory: $0["accusatory"] as! String, name: $0["name"] as! String, info: $0["info"] as! String)}
self.filteredData = self.originalData
}
func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int)
{
print(selectedScope)
if selectedScope != 0 {
filteredData.removeAll(keepingCapacity: false)
let array = self.originalData.filter{$0.category.contains(categories[selectedScope])}
filteredData = array
self.tableView.reloadData()
}
else{
filteredData = originalData
self.tableView.reloadData()
}
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
self.filteredData = self.originalData
self.tableView.reloadData()
}
func updateSearchResults(for searchController: UISearchController) {
if !((searchController.searchBar.text?.isEmpty)!){
filteredData.removeAll(keepingCapacity: false)
let array = self.originalData.filter{$0.category.contains(searchController.searchBar.text!)}
filteredData = array
self.tableView.reloadData()
}
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if self.searchController.isActive {
return self.filteredData.count
}else{
return self.originalData.count
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let objSummonses : Summonses = self.filteredData[indexPath.row]
cell.textLabel?.text = "\(objSummonses.category) -> \(objSummonses.name)"
return cell
}
}