使用 UISearchController 时如何过滤 updateSearchResultsForSearchController 中的对象数组? [英] How to filter object array in updateSearchResultsForSearchController when using UISearchController?

查看:17
本文介绍了使用 UISearchController 时如何过滤 updateSearchResultsForSearchController 中的对象数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的搜索控制器类如下:

My search controller class is as following:

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 中的类别过滤盛宴条目数组.其次是我如何为这种情况实现范围栏过滤器.

I have two requirements. First one is as how can I filter feastEntries array on the basis of category inside updateSearchResultsForSearchController. Second is as how can I implement scope bar filter for this scenario.

推荐答案

在 swift 中检查过滤器方法...使用它你可以过滤任何集合类型,你可以这样写:

Check filter method in swift...using this you can filter any collection type,and you could write something like this:

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

ScopeBar 实现:

用巧克力、硬等段创建分段控件...根据选定的段为该分段控件创建一个 IBaction,如上所示,在盛宴条目数组上应用过滤器.

Create a segmented control with chocolate,hard and other segment ... Create an IBaction for that segmented control depending on selected segment apply filter on feastEntries array as shown above.

这篇关于使用 UISearchController 时如何过滤 updateSearchResultsForSearchController 中的对象数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆