2015-07-06 37 views
0

我的搜索控制器類是如下:如何在使用UISearchController時過濾updateSearchResultsForSearchController中的對象數組?

class FeastSearchTableViewController: UITableViewController, UISearchResultsUpdating { 

    var feastEntries = [FeastEntry]() 

    var filteredFeasts = [FeastEntry]() 


    /* let tableData = ["One","Two","Three","Twenty-One"] 
    var filteredTableData = [String]()*/ 
    var resultSearchController = UISearchController() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.resultSearchController = ({ 
      let controller = UISearchController(searchResultsController: nil) 
      controller.searchResultsUpdater = self 
      controller.dimsBackgroundDuringPresentation = false 
      controller.searchBar.sizeToFit() 

      self.tableView.tableHeaderView = controller.searchBar 

      return controller 
     })() 

    self.feastEntries = [FeastEntry(category:"Chocolate", name:"chocolate Bar"), 
      FeastEntry(category:"Chocolate", name:"chocolate Chip"), 
      FeastEntry(category:"Chocolate", name:"dark chocolate"), 
      FeastEntry(category:"Hard", name:"lollipop"), 
      FeastEntry(category:"Hard", name:"candy cane"), 
      FeastEntry(category:"Hard", name:"jaw breaker"), 
      FeastEntry(category:"Other", name:"caramel"), 
      FeastEntry(category:"Other", name:"sour chew"), 
      FeastEntry(category:"Other", name:"gummi bear")] 

     // Reload the table 
     self.tableView.reloadData() 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     // 2 
     if (self.resultSearchController.active) { 
      return self.filteredFeasts.count 
     } 
     else { 
      return self.feastEntries.count 
     } 
    } 


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let feasts = self.feastEntries[indexPath.row] 

      let cell = tableView.dequeueReusableCellWithIdentifier("TimelineCellPhoto") as! TimelineCell 

      cell.typeImageView.image = UIImage(named: "timeline-photo") 
      cell.profileImageView.image = UIImage(named: "profile-pic-2") 
      cell.nameLabel.text = feasts.name 
      cell.photoImageView?.image = UIImage(named: "dish") 
      cell.dateLabel.text = "2 mins ago" 
      cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator 
      return cell 

    } 

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     self.performSegueWithIdentifier("feastDetail", sender: tableView) 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
     if segue.identifier == "feastDetail" { 
      let candyDetailViewController = segue.destinationViewController as! UIViewController 

     } 
    } 

    func updateSearchResultsForSearchController(searchController: UISearchController) 
    { 
     filteredFeasts.removeAll(keepCapacity: false) 

     let searchPredicate = NSPredicate(format: "category CONTAINS[c] %@", searchController.searchBar.text) 
     //let array = (feastEntries as NSMutableArray).filteredArrayUsingPredicate(searchPredicate) 
    /* let array = (feastEntries as NSArray).filteredArrayUsingPredicate(searchPredicate) 
     filteredFeasts = array as! [String] 
     */ 
     self.tableView.reloadData() 
    } 

} 

struct FeastEntry { 
    let category : String 
    let name : String 
} 

我有兩個要求。首先是如何根據updateSearchResultsForSearchController中的類別過濾feastEntries數組。 其次是如何爲此場景實施範圍欄過濾器。在

回答

1

檢查過濾器的方法迅速......用這個可以過濾任何集合類型,你可以寫這樣的事情:

let filteredEntry = self.feastEntries.filter { $0.0 == 「Chocolate」//filter condition } 

ScopeBar實現:

創建一個具有分段控制巧克力,堅硬和其他部分... 根據上面顯示的所選段應用過濾器對feastEntries數組創建一個適用於該分段控件的IBaction。

+0

abhishek,它有道理嗎? –

+0

過濾器似乎對我來說很好,但是您爲範圍欄提供的教程使用界面構建器來添加範圍按鈕。但是,在這裏,我必須在程序中處理它。對? – abhishek

+0

你想放什麼樣的scopebar? –

相關問題