2015-07-06 28 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? –

相关问题