From d1a2ba1c19d5e09f6967f1633eae11ddc672feb8 Mon Sep 17 00:00:00 2001 From: nixzhu Date: Wed, 19 Aug 2015 11:59:07 +0800 Subject: [PATCH] basic logic of search in Contacts --- .../Contacts/ContactsViewController.swift | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/Yep/ViewControllers/Contacts/ContactsViewController.swift b/Yep/ViewControllers/Contacts/ContactsViewController.swift index fafe5406..15d3b28a 100644 --- a/Yep/ViewControllers/Contacts/ContactsViewController.swift +++ b/Yep/ViewControllers/Contacts/ContactsViewController.swift @@ -18,6 +18,7 @@ class ContactsViewController: BaseViewController { let cellIdentifier = "ContactsCell" lazy var friends = normalFriends() + var filteredFriends: Results! struct Listener { static let Nickname = "ContactsViewController.Nickname" @@ -107,14 +108,18 @@ class ContactsViewController: BaseViewController { extension ContactsViewController: UITableViewDataSource, UITableViewDelegate { func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return Int(friends.count) + return searchController.active ? Int(filteredFriends.count) : Int(friends.count) } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as! ContactsCell - if let friend = friends[safe: indexPath.row] { + + let index = indexPath.row + let friend = searchController.active ? filteredFriends[safe: index] : friends[safe: index] + + if let friend = friend { let radius = min(CGRectGetWidth(cell.avatarImageView.bounds), CGRectGetHeight(cell.avatarImageView.bounds)) * 0.5 @@ -146,7 +151,10 @@ extension ContactsViewController: UITableViewDataSource, UITableViewDelegate { tableView.deselectRowAtIndexPath(indexPath, animated: true) - if let friend = friends[safe: indexPath.row] { + let index = indexPath.row + let friend = searchController.active ? filteredFriends[safe: index] : friends[safe: index] + + if let friend = friend { performSegueWithIdentifier("showProfile", sender: friend) } } @@ -158,12 +166,21 @@ extension ContactsViewController: UISearchResultsUpdating { func updateSearchResultsForSearchController(searchController: UISearchController) { + let searchText = searchController.searchBar.text + let predicate = NSPredicate(format: "nickname CONTAINS %@", searchText) + filteredFriends = friends.filter(predicate) + + updateContactsTableView() } } // MARK: - UISearchBarDelegate extension ContactsViewController: UISearchBarDelegate { - + + func searchBar(searchBar: UISearchBar, textDidChange searchText: String) { + + updateSearchResultsForSearchController(searchController) + } }