2011-06-23 3 views
1

私は、カスタムセルを使用して頑丈なUITableViewControllerを作成するために多くの努力をしました。 UISearchDisplayController内でそのUITableViewControllerを使用する個別のUITabbarItemを作成します。UISearchDisplayControllerをスーパークラスとして使用する

OOの設計原則に従うことで、私はUISearchDisplayControllerを定義するときに元のUITableViewControllerをサブクラス化すると思います。

@interface SearchViewController : CustomTableViewController 
{ 
    NSArray   *listContent;   // The master content. 
    NSMutableArray *filteredListContent; // The content filtered as a result of a search. 

    // The saved state of the search UI if a memory warning removed the view. 
    NSString  *savedSearchTerm; 
    NSInteger  savedScopeButtonIndex; 
    BOOL   searchWasActive; 
} 

しかし、このアプローチはまったく動作しません - 細胞は、(例えば、行のサイズが変更されていない)SearchViewControllerには全く更新されていない、とのUITableViewのデリゲートメソッドは効果を持っていないようです。

だから私はいくつかの質問を持っている:

  1. はこれがもしそうなら、どのように私はスーパービューからするlistContentとfilteredListContentを更新しない、これについて移動するための正しい方法です。

  2. 元の検索ビューにUISearchBarを追加し、必要に応じて非表示にする方がよいでしょうか?

答えて

0

私はUISearchDisplayControllerをサブクラス化して正しく動作させることはできないと思います。公開されていないメソッドでは、多くの処理が行われるため、正しい動作でそれらをオーバーライドすることはできません。

ただし、組み込みのUISearchDisplayControllerをカスタムテーブルセルと共に検索結果にそのまま使用することはできます。 cellForRowAtIndexPathをオーバーライドするだけで、任意のテーブルビューで動作するようにカスタムセルの作成と構成をカプセル化する必要があります(これは、カスタムデータをテーブルビューに表示する標準的な方法です)。コントローラがUISearchDisplayDelegateであることを確認し、そのメソッドを使用して検索リストに行を作成します。

searchTableViewにrowHeightのを設定する

- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)searchTableView 

を実装して、カスタムの高さを設定します。

関連する問題