Implement UISearchController with UITableView

后端 未结 1 1151
庸人自扰
庸人自扰 2020-12-12 02:32

Just wondering about the code that was used for the Raywenderlich Tutorial on how to add a UISearchController and how to use it with a UITableViewControll

相关标签:
1条回答
  • 2020-12-12 02:50

    UISearchDisplayController has been deprecated and replaced by UISearchController.And it is available in iOS 8.0 and later.

    The UISearchController class defines an interface that manages the presentation of a search bar in concert with the search results controller’s content. The search results controller, a UIViewController object specified by the searchResultsController property, manages the results of the search

    https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UISearchController/index.html

    Here is an example ,how i do it with UITableView resding in UIViewController..Just make few changes if you want to use with UITableViewController...

    import UIKit
    
    class ViewController: UIViewController , UITableViewDataSource, UITableViewDelegate,UISearchResultsUpdating {
    
    
        @IBOutlet weak var tblView: UITableView!
    
        var tabledata = ["lucques","chickendijon","godaddy","amazon","chris","ambata","bankofamerica","abelcine","AUTO + TRANSPORTATION","BILLS + UTILITIES","FOOD + DINING","HEALTH","AutoCare", "Auto Payment" , "Gas+Fuel","Electric Bill", "Internet/Television","Fast Foodd", "Gorceries" , "Restaurants","Gym Membership", "Health Insurance","auto","note-bullet","knife","heart"]
    
        var filteredTableData = [String]()
    
        var resultSearchController = UISearchController()
    
    
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            tblView.delegate = self
            tblView.dataSource = self
    
            self.resultSearchController = ({
    
                let controller = UISearchController(searchResultsController: nil)
                controller.searchResultsUpdater = self
                controller.dimsBackgroundDuringPresentation = false
                controller.searchBar.sizeToFit()
                controller.searchBar.barStyle = UIBarStyle.Black
                controller.searchBar.barTintColor = UIColor.whiteColor()
                controller.searchBar.backgroundColor = UIColor.clearColor()
                self.tblView.tableHeaderView = controller.searchBar
    
    
                return controller
    
    
            })()
            self.tblView.reloadData()
    
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
    
         func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    
            return 1
    
        }
    
    
    
         func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
            if self.resultSearchController.active {
    
    
               return self.filteredTableData.count
    
            }else{
    
    
                return self.tabledata.count
    
    
    
            }
    
        }
    
    
    
         func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
            var section = indexPath.section
            var row = indexPath.row
            let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier:"addCategoryCell")
            cell.selectionStyle =  UITableViewCellSelectionStyle.None
            cell.backgroundColor = UIColor.clearColor()
            cell.contentView.backgroundColor = UIColor.clearColor()
            cell.textLabel?.textAlignment = NSTextAlignment.Left
            cell.textLabel?.textColor = UIColor.blackColor()
            cell.textLabel?.font = UIFont.systemFontOfSize(14.0)
    
            if self.resultSearchController.active {
    
                  cell.textLabel?.text = filteredTableData[indexPath.row]
    
    
            }else{
    
                     cell.textLabel?.text = tabledata[indexPath.row]
    
            }
    
            return cell
    
        }
    
    
        func updateSearchResultsForSearchController(searchController: UISearchController) {
    
            filteredTableData.removeAll(keepCapacity: false)
    
            let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text)
    
            let array = (tabledata as NSArray).filteredArrayUsingPredicate(searchPredicate)
            filteredTableData = array as! [String]
    
            self.tblView.reloadData()
    
    
    
        }
    
    
    
    }
    
    0 讨论(0)
提交回复
热议问题