J.Kee
J.Kee

Reputation: 13

Type 'ViewController' does not conform to protocol 'UISearchResultsUpdating'

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

Answers (1)

iRiziya
iRiziya

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

Related Questions