2015-06-25 3 views
0

Я попытался реализовать UISearchController в IOS8, но не смог.Как реализовать UISearchController в iOS8?

Проблема в том, что я изменил текст и кнопку сферы, отметив, что представлен мне.

И кажется, что функция updateSearchResultsForSearchController даже не вызывается при обновлении строки поиска или кнопки области.

Вот мой код:

class SearchTestController: UITableViewController, UISearchResultsUpdating { 

struct Candy { 
    let category : String 
    let name : String 
} 

var searchcontroller = UISearchController(searchResultsController: nil) 




func updateSearchResultsForSearchController(searchController: UISearchController) { 
    filteredcandy = candies.filter() { (candy:Candy) -> Bool in 
     let scopetest = (self.category[self.searchcontroller.searchBar.selectedScopeButtonIndex] == "All") || (candy.category == self.category[self.searchcontroller.searchBar.selectedScopeButtonIndex]) 
     //let texttest = candy.name.rangeOfString(self.searchcontroller.searchBar.text) 
     //let result = scopetest && (texttest != nil) 
     return scopetest 
    } 
    println(filteredcandy.count) 
    self.tableView.reloadData() 
} 


var candies = [Candy]() 
var filteredcandy = [Candy]() 
var category = ["Chocolate","Hard","Other","All"] 


override func viewDidLoad() { 
    super.viewDidLoad() 

    // Sample Data for candyArray 
    self.candies = [Candy(category:"Chocolate", name:"chocolate Bar"), 
     Candy(category:"Chocolate", name:"chocolate Chip"), 
     Candy(category:"Chocolate", name:"dark chocolate"), 
     Candy(category:"Hard", name:"lollipop"), 
     Candy(category:"Hard", name:"candy cane"), 
     Candy(category:"Hard", name:"jaw breaker"), 
     Candy(category:"Other", name:"caramel"), 
     Candy(category:"Other", name:"sour chew"), 
     Candy(category:"Other", name:"gummi bear")] 



    // Reload the table 
    self.tableView.reloadData() 
    self.tableView.tableHeaderView = searchcontroller.searchBar 
    searchcontroller.searchBar.sizeToFit() 
    searchcontroller.searchBar.showsSearchResultsButton = true 
    self.definesPresentationContext = true 
    searchcontroller.searchBar.scopeButtonTitles = category 

} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if searchcontroller.active { 
     return self.candies.count 
    } else { 
     return self.candies.count 
    } 

} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    //ask for a reusable cell from the tableview, the tableview will create a new one if it doesn't have any 
    let cell = self.tableView.dequeueReusableCellWithIdentifier("Cell") as! UITableViewCell 

    var candy : Candy 
    // Check to see whether the normal table or search results table is being displayed and set the Candy object from the appropriate array 
    if searchcontroller.active { 
     candy = filteredcandy[indexPath.row] 
    } else { 
     candy = candies[indexPath.row] 
    } 


    // Configure the cell 
    cell.textLabel!.text = candy.name 
    cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator 

    return cell 
} 
+0

Вы установили делегат для контроллера поиска? – rb612

ответ

1

Добавьте следующие строки в viewDidLoad()

searchcontroller.searchResultsUpdater = self 
searchcontroller.delegate = self 

Обновление:

Добавьте следующую строку в viewDidLoad()

searchcontroller.searchBar.delegate = self 

Затем обновить результаты поиска в searchBar(_:selectedScopeButtonIndexDidChange:)

+0

спасибо, это действительно решает проблему. Но у меня есть другая проблема, я считаю, что результат обновляется только после обновления текста поиска, но не при обновлении кнопки области, это несовместимо с документацией Apple. Это ошибка? –

+0

Я обновил ответ, попробую –

+0

Спасибо, Правеен, я знаю, что это сработает, просто подумайте, что это неловко и излишне делать это таким образом, функция updateSearchResultsForSearchController() должна работать, как описано в документе , –

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