2015-06-15 2 views
1

Просто интересно о коде, который использовался для Raywenderlich Tutorial о том, как добавить UISearchController и как использовать его с помощью UITableViewController. Кажется, я не могу заставить его работать, и кто-то сказал мне, что он, возможно, получил устарел в iOS 8.0, знает ли кто-нибудь о том, как это сделать?Реализовать UISearchController с UITableView

UISearchController был построен в UIViewController NOT StoryBoard!

ответ

4

UISearchDisplayController устарели и заменен UISearchController й он доступен в прошивке 8.0 и более поздние версии.

Класс UISearchController определяет интерфейс, который управляет представлением строки поиска совместно с результатами поиска контента контроллера. Контроллер результаты поиска, объект UIViewController, заданный свойством searchResultsController , управляет результаты поиска

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

Ниже приведен пример, как я делаю это с UITableView resding в UIViewController ..Just сделайте несколько изменений, если вы хотите использовать с 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

Спасибо, спасибо, большое спасибо! : D –

+1

Также есть способ добавить его так, когда отображается UISearchController, ячейки все еще отображаются, потому что на данный момент ячейки не отображаются до тех пор, пока вы не введете имя, которое хотите найти, иначе спасибо! : D @anishansajuli –

+0

добавить, что логика здесь updateSearchResultsForSearchController, как вы хотите .... –

Смежные вопросы