2011-08-13 15 views
6

私は一般にアプリ全体にワインをリストアップするアプリを持っています(フルスクリーンまたはより小さなUIView)。このViewControllerは、ビューを割り当て、メインのViewControllerにデリゲート/ etcを割り当て、そのデリゲートを介してデータをポピュレートすることによって、通常は呼び出されます。素晴らしいことだが、今、私は検索の様相を構築しています、と私は結果を表示するために、この同じのViewControllerを使用したい既存のtableViewとViewControllerをUISearchDisplayControllerで使用する

wineListViewController = [[WineListViewController alloc] initWithWines:nil]; 
wineListViewController.navigationController = self.navigationController; 
self.winesTableView.dataSource = wineListViewController; 
self.winesTableView.delegate = wineListViewController; 
// Table population code goes here 

:画面上のワインを表示したいマスタービューから

私はcellForRowAtIndexPathなどにいくつかの複雑なルールを持っているからです。

しかし、UISearchDisplayControllerは独自のtableViewを使用したいので、同じ方法で表示するにはWineListViewController(heightForRow、cellForRow)からすべてのコードを複製する必要があります。 WineListViewControllerをUISearchDisplayControllerに接続してコードを複製しない方法がありますか?

答えて

2

はい。

あなたは(あなたがWineListViewControllerの適切な場所でこれを行うことができますし、単に「自己を渡すあなたのWineListViewControllerのインスタンスを指すようにUISearchDisplayControllersearchResultsDataSourcesearchResultsDelegateを設定する必要があります' UISearchDisplayControllerのこれらの2つのプロパティは、プロパティと完全に同じです。データソースおよび代理人 f a UITableViewUISearchDisplayControllerは、オリジナルのUITableView上にUITableViewを表示し、これらのプロパティを使用して、特定の検索文字列に表示する結果を指定できます(元のテーブルと同じように)。文字列が変更されるたびに検索結果テーブルビューを再読み込みし、UITableViewデータソースとデリゲートメソッドを呼び出す必要があります。 (例えば)以下のようにあなたがあなたの標準のUITableViewとWineListViewController OあなたのデータソースとデリゲートメソッドでsearchResultsTableViewを区別することができます

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (tableView == self.tableView) 
    { 
     // Return a standard listing for indexPath. 
    } 
    else if (tableView == self.searchDisplayController.searchResultsTable) 
    { 
     // Return a filtered cell, based on a filtered model of the searchDisplayController's searchBar's search string. 
    } 
} 
YはUISearchDisplayControllerのデリゲートメソッドを見てみる必要があります

、などそれらを実装して、検索表示結果テーブルをいつ更新するかを指定することができます。

+0

これは素晴らしい返信でした。ありがとうございました。私は実際それが有線になっていたが、データが到着したらtableViewをリロードするためのリマインダーが必要でした。次の人にこれを読んでもらうには、上記のコードの後に​​これが必要です: 'self.searchDisplayController.searchResultsDataSource = wineListController; self.searchDisplayController.searchResultsDelegate = wineListController; '' SearchResultsDone'には次のものが必要です: 'wineListController.currentWines = resultArray; [self.winesTableView reloadData]; ' – beeudoublez

関連する問題