繁体   English   中英

如何使用分段控件显示我的plist中的所有类别?

[英]How can I use the Segmented Control to show all the categories from my plist?

好的,我创建了一个plist,其中包含7个类别,分别为A,B,C,D,E,F。每个类别中都有一个项目列表。 现在,我正在尝试使用分段控件,以便如果用户单击A,它将显示在表视图的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
       }

就像在我的范围搜索栏上一样,但是我似乎无法使其与分段控件一起使用。 召唤的类别包含在字符串“全部”,“ A”,“ B”,“ C”,“ D”,“ E”,“ F”中,如果用户,我只是希望这些项目显示在表格视图中命中A,将显示类别A中的所有项目。 在顶部对我的代码发表了评论,我不确定该在该位置放置哪种代码来计算其类别中所有具有A的项目。

请使用以下代码通过细分索引加载所有类别。 根据需要更改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

    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM