2016-04-18 10 views
1

名前の7セルと各名前の小さな説明で構成される単純なテーブルビューに検索バーを追加しようとしています。ここでは画像のようにTableViewの検索バーが動作しない

:名前とデス:

enter image description here

私は2つの属性を持つビジネスと呼ばれる迅速ファイルにクラスを作りました。ここで

は、ビューコントローラのコードです:

class FirstViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 
@IBOutlet weak var TableView: UITableView! 
var B = [Business]() //candies 
var filteredNames = [Business]() 

let searchController = UISearchController(searchResultsController: nil) 

func filterContentForSearchText(searchText: String, scope: String = "All") { 
    filteredNames = B.filter { Bu in 
     return Bu.Name.lowercaseString.containsString(searchText.lowercaseString) 
    } 

    TableView.reloadData() 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 


    B = [ 
     Business(Name:"Mariah", Des:"I'm Here to help"), 
     Business(Name:"Nada", Des:"Hi"), 
     Business(Name:"Atheer", Des:"Hello"), 
     Business(Name:"Lojian", Des:"I can Help you"), 
     Business(Name:"Nadya", Des:"Hayat"), 
     Business(Name:"Omnia", Des:"Yahoo"), 
     Business(Name:"Eman", Des:"I have amazing stuff"), 
     Business(Name:"Amani", Des:"Yess") 
    ] 

    searchController.searchResultsUpdater = self 
    searchController.dimsBackgroundDuringPresentation = false 
    definesPresentationContext = true 
    TableView.tableHeaderView = searchController.searchBar 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if searchController.active && searchController.searchBar.text != "" { 
     return filteredNames.count 
    } 
    return B.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = self.TableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CellTableViewCell 

    cell.NameLabel.text = B[indexPath.row].Name 
    cell.DescriptionLabel.text = B[indexPath.row].Des 

    let Bu: Business 

    if searchController.active && searchController.searchBar.text != "" { 
     Bu = filteredNames[indexPath.row] 
    } else { 
     Bu = B[indexPath.row] 
    } 
    cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator 
    return cell 
} 


    } 

extension FirstViewController: UISearchResultsUpdating { 
func updateSearchResultsForSearchController(searchController: 
(UISearchController) { 
filterContentForSearchText(searchController.searchBar.text!) 
} 
} 

私はそれを行うには、このチュートリアルに従っ: https://www.raywenderlich.com/113772/uisearchcontroller-tutorial

私はシミュレータで検索しようとしたとき、結果は常にwhay私にはわかりません最初のセル:Mariah

コードに何が問題なのですか?

+0

あなたのコードでは、フィルタの結果が正常であれば条件を確認する前にBのラベルを両方設定しています。大抵の回答はほとんどあなたのために働くはずです – HardikDG

答えて

0

セルを移入するために検索結果を使用しません。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = self.TableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CellTableViewCell 

    let Bu: Business 

    if searchController.active && searchController.searchBar.text != "" { 
     Bu = filteredNames[indexPath.row] 
    } else { 
     Bu = B[indexPath.row] 
    } 

    cell.NameLabel.text = Bu.Name 
    cell.DescriptionLabel.text = Bu.Des 

    cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator 
    return cell 
} 

そして、プロパティのための資本最初の文字を使用しないでください:これであなたcellForRowAtIndexPathを交換してください。

+0

大文字はどうやって使用できませんか?どのコード行ですか? – Mariah

+0

'@IBOutlet弱いvarテーブルビュー:UITableView!'と 'var b = [ビジネス]()' – dasdom

+0

しかし、私はなぜプロパティの大文字を使わないのですか? – Mariah