0

現在、アプリに検索機能を追加しようとしていますが、これを構成するときにいくつかの問題があります。3つのテーブルビューを持つタブベースのアプリケーションがあり、すべてのテーブルビューに1つの検索バーを追加したいと思います。しかし、これを設定するのはそれほど簡単ではないようです。

発生する最初の問題は、ストーリーボードエディター内ですべてのテーブルビューに個別の検索バーを追加することしかできないが、tabBarController自体に検索バーを追加することはできないということです。同じ検索バーが3つのテーブルビューすべてに表示されるようにします。

2番目の問題は、これがある程度機能する場合、3つの異なるテーブルビューでsearchDisplayControllerを設定する必要がありますが、1つのテーブルビューでsearchDisplayControllerを初期化できます。

iPhoneの1つの検索バーで3つの異なるカテゴリを検索するための最良のアプローチは何ですか?そこにチュートリアルはありますか?Facebookのような他のアプリも見ていて、それらも1つのテーブルビュー内を検索しています。

4

2 に答える 2

1

次のように3つの検索表示コントローラーを使用できます。各タブの各vcに、次のようなメソッドを実装させます(そしてそれを公に宣言します)。

- (void)searchFor:(NSString *)string {
    [self.searchDisplayController setActive:YES];
    self.searchDisplayController.searchBar.text = string;
}

それらのそれぞれは、このメソッドを実装する必要があります。

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {

    // do the search logic for my table
    // set a badge on my tab indicating how many results I found

    // then perform it on the other vcs:
    NSMutableArray *otherVCs = [[self.tabBarController viewControllers] mutableCopy];
    [otherVCs removeObject:self];

    for (MyViewController *otherVC in otherVCs) {
        [otherVC searchFor:searchString];
    }
}

他のすべてのタブVCがロードされていることを確認する必要がある場合があります(アプリを起動した場合、1つのタブにアクセスしてこれを試してみると、他のVCの準備ができていない可能性があります。これを行うには、この行をループに挿入して、ロードするビュー: (void)[otherVC view];

(注-この回答はARCを前提としています)

于 2013-01-19T18:50:17.550 に答える
0

このソリューションには少し問題があります。無限ループが発生します。解決策は、ビューが表示されているかどうかを証明する必要があることです。

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    [self setUpFilteredEndlessScrollingWithUrl:kGetAllTours];
    [self loadFilteredDataWithPath:kGetAllTours];
    if (self.isViewLoaded && self.view.window) {
        NSMutableArray *otherVCs = [[self.tabBarController viewControllers] mutableCopy];
        [otherVCs removeObject:self];

        for (BaseTableViewController *otherVC in otherVCs) {
            [otherVC searchFor:searchString];
        }
    }
    return YES;
}
于 2013-01-23T12:46:14.470 に答える