I am trying to create a search function using UISearchController. However, I cannot get it to work with my Team object. I started by creating a Team Object that contains an identifier, name, and short name. Then I extract teamData from the url and add Team Objects to the array that is populated in the tableView. This tableView contains a searchController that should filter data, but nothing happens.
arrays
var teamArray = Array<Team>() var filteredTableData = [String]()
Getteams function
func getTeams(url: String) { isApiCalling = true request(.GET, url, parameters: nil) .response { (request, response, data, error) in if error == nil { let data: AnyObject = data! let jsonArray = JSON(data: data as! NSData) for (key: String, subJson: JSON) in jsonArray { // Create an object and parse your JSON one by one to append it to your array var newTeamObject = Team(id: subJson["id"].intValue, name: subJson["name"].stringValue, shortname: subJson["shortname"].stringValue) self.teamArray.append(newTeamObject) } self.isApiCalling = false self.tableView.reloadData() self.refreshControl?.endRefreshing() } } }
CellForRowAtIndexPath
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("teamCell", forIndexPath: indexPath) as! TeamCell cell.textLabel?.font = UIFont(name: "HelveticaNeue-Light", size: 20) cell.textLabel?.text = self.teamArray[indexPath.row].name as String if (self.cellSelected.containsObject(indexPath)) { cell.accessoryView = cell.accessoryCheck } else { cell.accessoryView = cell.accessoryUncheck } return cell }
FilterData p>
func updateSearchResultsForSearchController(searchController: UISearchController) { filteredTableData.removeAll(keepCapacity: false) let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text) let array = (teamArray as NSArray).filteredArrayUsingPredicate(searchPredicate) filteredTableData = array as! [String] self.tableView.reloadData() }
Team objects
class Team{ var id: Int! var name: NSString! var shortname: NSString! init(id: Int, name:NSString, shortname: NSString) { self.id = id self.name = name self.shortname = shortname } }
ios uitableview swift uisearchcontroller
Peter Pik
source share