Reputation: 13
I want to set up a tableView
to search the cell I needed,but there have a problem. First I use the protocol named UISearchDisplayController
but the Xcode warning is not good in IOS 8.0,so I read the protocol UISearchResultUpdating
. But when I add the UISearchResultUpdating
in my Viewcontroller,there have a mistake in UISearchResultUpdating
!
Type 'ViewController' does not conform to protocol 'UISearchResultsUpdating'
What should I do to solve?
class ViewController:UIViewController,UITableViewDataSource,UITableViewDelegate,UISearchResultsUpdating {
@IBOutlet weak var tableview: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
tools = [TodoModel(id: "1", image: "QQ", title: "聊天", date: DateFromString("2013-12-13")!),
TodoModel(id: "2", image: "unbrella", title: "下雨", date: DateFromString("2013-12-13")!),
TodoModel(id: "3", image: "plane", title: "飞行", date: DateFromString("2013-12-13")!)]
navigationItem.leftBarButtonItem = editButtonItem()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
if tableview == searchDisplayController?.searchResultsTableView{
return filtertool.count
}
else {
return tools.count
}
}
// Row display. Implementers should *always* try to reuse cells by setting each cell's reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier:
// Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls)
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cell = self.tableview.dequeueReusableCellWithIdentifier("cellinit") as! UITableViewCell
var tool : TodoModel
if tableview == searchDisplayController?.searchResultsTableView{
tool = filtertool[indexPath.row] as TodoModel
}
else { tool = tools[indexPath.row] }
var image = cell.viewWithTag(1) as! UIImageView
var title: UILabel = cell.viewWithTag(2) as! UILabel
var date: UILabel = cell.viewWithTag(3) as! UILabel
image.image = UIImage(named: tool.image)
title.text = tool.title
let local = NSLocale.currentLocale()
let dateformat = NSDateFormatter.dateFormatFromTemplate("yyyy-MM-dd", options: 0, locale: local)
let datematter = NSDateFormatter()
datematter.dateFormat = dateformat
date.text = datematter.stringFromDate(tool.date)
return cell
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 65
}
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath){
if editingStyle == UITableViewCellEditingStyle.Delete {
tools.removeAtIndex(indexPath.row)
self.tableview.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
}
}
override func setEditing(editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
self.tableview.setEditing(editing, animated: animated)
}
@IBAction func close(segue: UIStoryboardSegue){
tableview.reloadData()
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "EditingSegue"{
var vc = segue.destinationViewController as!
EditingView
var indexpath = tableview.indexPathForSelectedRow()
if let index = indexpath {
vc.tool = tools[index.row]
}
}
}
func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath){
let tool = tools.removeAtIndex(sourceIndexPath.row)
tools.insert(tool, atIndex: destinationIndexPath.row)
}
func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool
{
return editing
}
func searchDisplayController(controller: UISearchDisplayController, shouldReloadTableForSearchString searchString: String!) -> Bool{
filtertool = tools.filter(){$0.title.rangeOfString(searchString) != nil }
return true
}
}
Upvotes: 1
Views: 3763
Reputation: 3245
It seems like you have not implemented the delegate methods of UISearchResultsUpdating
You need to include the following method in your code :
func updateSearchResultsForSearchController(searchController: UISearchController){
//your code
}
Upvotes: 6