0

もともと、ストーリーボードを使用してレイアウトされた静的セルのテーブルビューを備えたメイン テーブル ビュー コントローラーがあります。続いて、この UITableViewController に SearchDisplayController を追加しました。numberOfSectionsInTableView: や numberOfRowsInSection などのテーブルビュー データ ソース デリゲート メソッドでは、次のことを確認して、独自のテーブルビュー (静的セルを含む) と検索ディスプレイ コントローラーの searchResultsTableView を区別しています。

if (tableView == self.searchDisplayController.searchResultsTableView)
{
   // logic for searchResultsTableView;
}
else
{
  // logic for my main tableView
}

私の知る限り、これは正しいアプローチのようです。しかし、cellForRowAtIndexPath メソッドで次のことを試したところ、キャッチされていない例外 'NSInternalInconsistencyException' が原因でアプリケーションを終了しています。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == self.searchDisplayController.searchResultsTableView)
    {
        // Just want to use a default cell. There seems to be no good way of specifying a prototype cell for this in the storyboard.
        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if ( cell == nil ) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }
        return cell;
    }
    else
    {
         // how to handle this case?
         return nil;
    }
}

以前は、検索表示コントローラーがなければ、セルが静的であるため、このメソッドを実装する必要はありませんでした。私の質問は、動的セルを含む検索ディスプレイコントローラーテーブルビューと静的セルを含むテーブルビューがあるハイブリッドケース (cellForRowAtIndexPath と同じストーリーボードで両方の種類のセルを指定する) をどのように処理すればよいかということだと思います。そのようなシナリオは珍しくないと思います。

前もって感謝します!

編集:

最初のコメント投稿者が示唆したようにelse句でスーパーメソッドを呼び出すとクラッシュが修正されたようですが、tableViewControllerが静的テーブルビューと非テーブルビューの両方のデリゲートであるという固有の問題が原因であると感じるさらに別の問題に遭遇しています-静的なもの (検索表示結果のテーブル ビュー)。

新しい問題: 静的テーブルビューに 2 つの静的セルがあります。検索結果のテーブルビューに 2 行を超えるデータを入力すると、NSRangeException', reason: -[__NSArrayI objectAtIndex:]: index 2 beyond bounds [0 .. 1] が発生します。

デリゲート メソッド: numberOfRowsInSection が searchResultsTableView の場合に起動され、正しい番号を返しているにもかかわらず、searchResultsTableView がメインの静的テーブルビューから何らかの方法で行数を取得したようです (3 番目の静的セルを追加したとき、結果は一貫していました)。

静的なテーブルビューを検索表示テーブルビューでうまく機能させるための回避策はありますか? メインの静的テーブルビューを動的セルを持つテーブルビューに変換することを考えています..他の提案は大歓迎です, ありがとう!

4

4 に答える 4

0

私もこの問題に直面しました。したがって、私の決定は、プロトコルを使用していくつかのクラスを作成し、それを DataSource として UISearchDisplayViewController に割り当てることでした。

于 2013-09-05T05:33:04.470 に答える
0

静的セルを動的セルに変更する必要はありません。次のことができます。

if (tableView == self.searchDisplayController.searchResultsTableView)
{
   // logic for searchResultsTableView;
}
else
{
   UITableViewCell *cell = [super tableView:tableView
                       cellForRowAtIndexPath:indexPath];
   return cell;

}
于 2014-08-26T01:40:47.017 に答える