にUiSearchBar
実装があり、タイトル用と説明用のTableView
2つのがあります。NSArray
タイトルの配列を検索すると、正しい検索が返されますが、検索に含まれる行をクリックすると、最初の行をクリックすると「行0」が表示されます。私の質問は、検索がユーザー検索に基づいてタイトルを再配置するときに、description配列がタイトルと同じ行に対応するように、2つの配列を接続する方法です。
3 に答える
単に2つNSArray
のを使用せず、カスタムNSObject
オブジェクトで1つだけを使用します。
@interface SomeObject : NSObject {
NSString *_title;
NSString *_description;
}
- (BOOL)matchesKeywords:(NSString *)keywords;
@end
次に、Obj-Cのように、すべての情報を1つのクラスに保存します。オブジェクト自体が特定のキーワードに一致するかどうかを認識しているため、検索を簡単に実行できます。したがって、変更SomeObject
する場合は、クラス自体でそれらの変更を簡単に管理できます。
私は一度この問題を抱えていたので、簡単な修正のためにこれを行いました:
完全な辞書とフィルタリングされた辞書を切り替える場合は、上記の BOOL をそれぞれ NO と YES に設定するだけです。
次に、didSelectRowAtIndexPath で「if」ステートメントを使用して、usingFilterArray の状態を確認します。残りはかなり簡単なはずです。(まだ助けが必要な場合はお知らせください) フィルターの後に検索を実行するときの 1 つのこと 辞書が水和されている 検索をキャンセルした場合、これを必ず実行する必要があります。そうしないと、水和された辞書が実行されないため、アプリがクラッシュします。その中にオブジェクトがあります。(フィルタリングされた辞書を消去したと思います)
- (void) searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller {
[self.tableView reloadData];
}
これは簡単な修正です。
2 つの配列を 1 つにマージしましたが、セルがタイトルと説明の両方を保持しているため、tableviewcell の読み込みが大幅に遅くなりました