2015-09-07 102 views
1

我想设置一个tableView来搜索我需要的单元格,但是有问题。首先我使用名为UISearchDisplayController的协议,但IOS 8.0中的Xcode警告不好,所以我读了协议UISearchResultUpdating。但是当我在ViewController中添加UISearchResultUpdating时,在UISearchResultUpdating中有错误!类型'ViewController'不符合协议'UISearchResultsUpdating'

类型 '视图控制器' 不符合协议 'UISearchResultsUpdating'

我应该怎么做才能解决?

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 
    } 
} 

回答

6

好像你还没有实现的UISearchResultsUpdating

委托方法你需要在你的代码下面的方法:

func updateSearchResultsForSearchController(searchController: UISearchController){ 
    //your code 
} 
+1

谢谢!对我来说帮助 – AmyNguyen

+1

谢谢!为我工作 –

+0

感谢它的工作 –

相关问题