Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func setupUI() {
- self.view.backgroundColor = UIColor.whiteColor()
- // Required to properly display searchbar within nav & tabbar controllers
- self.extendedLayoutIncludesOpaqueBars = true // have tried setting this to false as well
- self.definesPresentationContext = true
- self.searchResultsController = AppDelegate.getViewController(ScheduleStoryboard.name, controllerName: ScheduleStoryboard.Identifiers.foodSearchResults) as? SearchResultsController
- self.searchController = UISearchController(searchResultsController: searchResultsController)
- self.searchController.searchResultsUpdater = self
- self.searchController.delegate = self
- self.searchController.dimsBackgroundDuringPresentation = true
- self.searchController.searchBar.delegate = self
- self.searchController.searchBar.placeholder = "Search foods..."
- self.searchController.searchBar.setBackgroundImage(UIImage(named: "background-searchbar")?.resizableImageWithCapInsets(UIEdgeInsetsMake(0, 0, 0, 0)), forBarPosition: .Any, barMetrics: .Default)
- self.searchController.searchBar.tintColor = UIColor.whiteColor()
- self.searchController.searchBar.sizeToFit()
- // this headerView does NOT belong to the tableView, its anchored on top of the tableView so that the searchbar remains fixed when scrolling
- self.headerView.addSubview(searchController.searchBar)
- self.tableView.delegate = self
- self.tableView.dataSource = self
- self.tableView.tableHeaderView?.backgroundColor = UIColor.clearColor()
- self.tableView.tableHeaderView?.addBorder(.Bottom, color: UIColor.groupTableViewBackgroundColor(), width: 0.25)
- self.segmentedControl.tintColor = UIColor.genioBlue()
- }
- class SearchController: UITableViewController {
- let searchController = UISearchController(searchResultsController: nil)
- var items:[ArrayOfYourType]
- var filteredItems:[ArrayOfYourType]
- var scopeTitles:[String]?
- override func viewDidLoad() {
- super.viewDidLoad()
- searchController.searchResultsUpdater = self
- searchController.dimsBackgroundDuringPresentation = false
- definesPresentationContext = true
- tableView.tableHeaderView = searchController.searchBar
- searchController.searchBar.scopeButtonTitles = scopeTitles
- searchController.searchBar.delegate = self
- }
- // MARK: - Table view data source
- override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
- // #warning Incomplete implementation, return the number of sections
- return 1
- }
- override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- if searchController.active {
- return filteredItems.count
- }
- return items.count
- }
- func filterContentForSearchText(searchText: String, scope: String = "All") {
- filteredItems = items.filter { item in
- //return true or false depending on your filter
- return true
- }
- dispatch_async(dispatch_get_main_queue(), { () -> Void in
- self.tableView.reloadData()
- })
- }
- override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
- let cell = UITableViewCell(style: UITableViewCellStyle.Subtitle,
- reuseIdentifier: nil)
- let item: String
- let category: String
- if searchController.active {
- item = filteredItems[indexPath.row].getTitle()
- category = filteredItems[indexPath.row].getCategory()
- }
- else {
- item = items[indexPath.row].getTitle()
- category = items[indexPath.row].getCategory()
- }
- cell.textLabel?.text = item
- cell.detailTextLabel?.text = category
- return cell
- }
- override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
- //your code here
- }
- }
- //MARK: UISearchResultsUpdating
- extension SearchController: UISearchResultsUpdating {
- func updateSearchResultsForSearchController(searchController: UISearchController) {
- if let _ = scopeTitles {
- let searchBar = searchController.searchBar
- let scope = searchBar.scopeButtonTitles![searchBar.selectedScopeButtonIndex]
- filterContentForSearchText(searchController.searchBar.text!,scope:scope)
- }
- else {
- filterContentForSearchText(searchController.searchBar.text!)
- }
- }
- }
- //MARK: UISearchBarDelegate
- extension SearchController: UISearchBarDelegate {
- func searchBar(searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
- filterContentForSearchText(searchBar.text!, scope: searchBar.scopeButtonTitles![selectedScope])
- }
- }
Add Comment
Please, Sign In to add comment