2

背景

UITableViewController私は、使用ごとにサブクラスを再作成することにより、いくつかの場所でサブクラスを使用する iPhone アプリを持っています。それらの用途の 1 つは、検索コントローラーです。

@interface TableViewController : UITableViewController
// ...
@interface SearchTableViewController : TableViewController <UISearchDisplayDelegate, UISearchBarDelegate>

ストーリーボード エディターでは、を使用する各ビューで同じテーブル ビュー、セル構造、および再利用識別子を使用していますTableViewController。私がそれを使用しているすべての場所で、ストーリーボードはデザイン時のプロトタイプに基づいてセルを生成しているため、メソッドにセクションtableView:cellForRowAtIndexPath:を含める必要はありません。if (cell == nil)

問題

何か間違ったことをしたため、検索コントローラーのセルが他のセルのようにストーリーボードによって生成されません。最初にif (cell == nil)、問題を解決するためにビットを追加しましたが、検索で空白行が表示されます。実際、検索では正しい数の空白行が表示されます。検索をキャンセルすると、結果がバックグラウンドから表示されます。からのコードは次のTableViewControllerとおりです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    ModelObject* obj = [self.dataSource modelAtIndex:indexPath.row];
    UILabel* name = (UILabel*) [cell viewWithTag:1];
    name.text = obj.name;
    return cell;
}

問題を特定するために必要な詳細が他にもあると思いますが、これがどのような原因で発生する可能性があるかについてのヒントは役に立ちます。ありがとう。

4

2 に答える 2

1

ストーリーボードを使用している場合は、オブジェクト「検索ディスプレイ コントローラー付きの検索バー」を選択し、ビュー コントローラー (VC としましょう) に配置します。次に、Xcode は検索バーを VC にある検索表示コントローラーに自動的にリンクします。したがって、VCでは、次の方法で検索ディスプレイコントローラーにアクセスできself.searchDisplayController 、VCは次のようなプロトコルを採用する必要があります。UISearchBarDelegate, UISearchDisplayDelegate また、検索バーには次の方法でアクセスできますself.searchDisplayController.searchBar

UISearchDisplayDelegate プロトコルで相対メソッド (テーブル ビューなど) を実装します。ビンゴ!検索結果が自動的に表示されます。

于 2012-12-23T09:17:31.480 に答える