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
}
}
谢谢!对我来说帮助 – AmyNguyen
谢谢!为我工作 –
感谢它的工作 –