使用tableview设置searchdisplaycontroller的问题 - Swift

时间:2016-05-21 22:37:50

标签: ios swift uitableview uisearchdisplaycontroller

我试图为我的tableview设置searchdisplaycontroller,并在为tableview本身声明我的iboutlet时遇到了一些问题。附件是截图以及我的代码。任何见解都非常赞赏。

Code Errors Img

import UIKit

class DataTableExercisesTableViewController: UITableViewController, UISearchBarDelegate {

var exercises = ["Abs", "Arms", "Back", "Chest", "Legs", "Shoulders", "Triceps"]
var searchActive : Bool = false

@IBOutlet var tableView: UITableView!
@IBOutlet weak var searchBar: UISearchBar!
var filtered:[String] = []

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.tableFooterView = UIView()

    tableView.delegate = self
    tableView.dataSource = self
    searchBar.delegate = self

}



// MARK: - Table view data source



override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if(searchActive) {
        return filtered.count
    }
    return exercises.count;
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell")! as UITableViewCell;
    if(searchActive){
        cell.textLabel?.text = filtered[indexPath.row]
    } else {
        cell.textLabel?.text = exercises[indexPath.row];
    }

    return cell;
}




 override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {



}


func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
    searchActive = true;
}

func searchBarTextDidEndEditing(searchBar: UISearchBar) {
    searchActive = false;
}

func searchBarCancelButtonClicked(searchBar: UISearchBar) {
    searchActive = false;
}

func searchBarSearchButtonClicked(searchBar: UISearchBar) {
    searchActive = false;
}

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {

    filtered = exercises.filter({ (text) -> Bool in
        let tmp: NSString = text
        let range = tmp.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch)
        return range.location != NSNotFound
    })
    if(filtered.count == 0){
        searchActive = false;
    } else {
        searchActive = true;
    }
    self.tableView.reloadData()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

1 个答案:

答案 0 :(得分:0)

您是否尝试过彻底清除IBoutlet? (两者都来自故事板连接和代码)。我认为这将解决您的问题。