2015-12-18 21 views
11

iOS 9'da UISearchController kullanıyorum ve arama çubuğunu bir UIViewController içinde görüntülüyorum, arama çubuğuna ilk tıklıyorum ve düşündüğüm her şeyi denedim çok fazla gecikme yaşıyorum hiçbir boşuna ... aşağıda benim gecikme bir video için bir bağlantı ile birlikte benim kodum - gecikme hem simülatör hem de cihazımda olur. http://sendvid.com/xgq81stxUISearchController arama çubuğu animasyonu çok yavaş ilk defa

Teşekkür:

İşte
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() 
} 

oluyor whats gösteren videonun bağlantısı olduğunu!

+0

Bunun için geçici bir çözüm bulmak mümkün gittiniz umut

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]) } } 

: İşte benim uygulamasıdır? Ben de aynı sorunla karşılaşıyorum –

+0

hayır maalesef:/ – narciero

+0

benim için de aynı sorun. Ben de bir çözüm bulamadım. –

cevap

0

Sadece bir kez bir arama denetleyicisi oluşturdum, ancak temel sınıfım olarak bir UITableViewController kullandım. Ben bu yardımcı olur :)

İlgili konular