0

検索結果のセルが tableView に表示されません。検索は正常に機能しています。すべてのデータを確認しましたが、値に cell.localName?.text を割り当てると、常に nil になります。何が悪いのかわからない。Objective-C で同じ問題を抱えた別の投稿を見つけましたが、セルをデキューするときに self.tableView を追加して、実際の tableView からセルを使用する必要があるという回答がありましたが、うまくいきませんでした。助言がありますか?

これが私のコードです:

class SearchResultsController: UITableViewController, UISearchResultsUpdating {
var localNames: [String] = []
var filteredNames: [String] = []

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.registerClass(localCell.self, forCellReuseIdentifier: "localCell")
}

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

func updateSearchResultsForSearchController(searchController: UISearchController) {
    let searchedString = searchController.searchBar.text
    filteredNames.removeAll(keepCapacity: true)
    if !searchedString.isEmpty {
        let filter: String -> Bool = {name in
            let range = name.rangeOfString(searchedString, options: NSStringCompareOptions.CaseInsensitiveSearch)
            return range != nil
        }
            let matches = localNames.filter(filter)
            filteredNames += matches

    }
    tableView.reloadData()
}



// MARK: - Table view data source

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete method implementation.
    // Return the number of rows in the section.
    return filteredNames.count
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell: localCell = self.tableView.dequeueReusableCellWithIdentifier("localCell") as localCell
    cell.localName?.text =  filteredNames[indexPath.row]
    println(cell.localName?.text)
    cell.localAddress?.text = "text"
    cell.scheduleData?.text = "text"
    cell.salaData?.text = "text"
    cell.wifiData?.text = "text"
    return cell
}
4

2 に答える 2

1

わかりましたので、他の誰かが私と同じ問題を抱えている場合に備えて、解決策と投稿を見つけました。ストーリーボードのプロトタイプ セルのカスタム セルを使用していました。resultController は、カスタム セルについて何も知らない新しい tableView を作成します。これが、常に nil を返す理由です。それを修正するために、新しいものではなく、最初に使用されたtableViewへの参照を作成するか、実際のテーブルからセルを取得しました。このようにして、カスタムセルが認識されました。

于 2015-04-09T20:33:03.680 に答える
1

セルが返された場合は、呼び出しnilの後に次を使用して自分で作成します。dequeueReusableCellWithIdentifier

if(cell == nil){
    cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "localCell")
}

また、UISearchController を使用している場合は、同じ配列を操作するのではなく、UITableView を設定するために 2 つの異なる配列を使用する必要があります。

これを行うには、tableView デリゲート メソッド内で検索コントローラーがアクティブであるかどうかを確認し、それに応じて動作します。

于 2015-04-08T23:32:20.317 に答える