0

Would it be possible (or advisable) to attempt to subclass a UITableView to have built-in search functionality?

There are two reasons I wanna do this:

Reuse: I could use the same subclass at multiple places in my project with different data-sources. Cleaner code: It would de-clutter my view controller. All the plumbing for implementing search would be neatly incapsulated in the subclass implementation.

Any ideas how one would go about doing this?

4

2 に答える 2

0

使用するUISearchDisplayController

Apple docから、

検索表示コントローラは、検索バーの表示と、別のビューコントローラによって管理されているデータの検索結果を表示するテーブルビューを管理します。

検索する元のコンテンツの管理を担当する検索バーとビューコントローラーを使用して、検索表示コントローラーを初期化します。ユーザーが検索を開始すると、検索表示コントローラーは、元のビューコントローラーのビューに検索インターフェイスを重ね合わせて検索結果を表示する役割を果たします。結果は、検索表示コントローラーによって作成されたテーブルビューに表示されます。元のViewControllerに加えて、論理的に4つの役割があります。これらは通常、すべて同じオブジェクト、多くの場合、元のViewController自体によって再生されます。

次のように実装できます。

searchController = [[UISearchDisplayController alloc]
                         initWithSearchBar:searchBar contentsController:self];
searchController.delegate = self;
searchController.searchResultsDataSource = self;
searchController.searchResultsDelegate = self;

UISearchDisplayControllerそれ自体がすべての通常の検索機能をカプセル化します。必要に応じて、サブクラス化して、計画していることをすべて達成できます。これはどのクラスでも使用できます。

于 2012-10-30T03:58:09.063 に答える
0

明確にする必要があると思います。ユーザーの検索でテーブル内の行までスクロールするだけですか、それとも行をフィルタリングして検索語に一致する行のみを表示するのですか。

行をフィルタリングしたい場合...

UITableViewこれを行うためにサブクラスを作成するのはかなり複雑です。これは、独自のプライベートUITableViewDataSourceUITableViewDelegate「ユーザー」データソースとデリゲートの前に挿入する必要があるためです。

また、テーブルビューのデータを取得する方法によっては、かなり非効率になる場合があります。テーブルビューに数千の行を含めることができ、それらが(たとえば)SQLiteデータベースまたはCore Dataからのものである場合、データソースは一致する行をより効率的に検索できます。テーブルビューでは、行を1つずつ繰り返し、それぞれが一致するかどうかを確認するしかありません。または、データソースプロトコルを拡張して、テーブルビューに検索文字列をデータソースに渡す方法を提供する必要があります...これは、テーブルビューに検索を配置するという目標を達成できないようです。

さまざまなテーブルビューのデータがどこから来ているかについて詳しく教えていただければ、より良いアドバイスを提供できる可能性があります。

于 2012-10-30T03:58:27.770 に答える