読み込み時に検索バーとスコープ バー ボタンを含む UITableView を表示します。ユーザーがスコープ バー ボタンをタップすると、キーボードが表示され、検索バーがフォーカスされます (ファーストレスポンダーになります)。
スコープ バー ボタンを使用して、キーボードを表示せずにテーブル アイテムをフィルタリングできるようにすることはできますか? ユーザーは、検索テキスト入力フィールド内を具体的にタップすることで、キーボードを表示できます。
読み込み時に検索バーとスコープ バー ボタンを含む UITableView を表示します。ユーザーがスコープ バー ボタンをタップすると、キーボードが表示され、検索バーがフォーカスされます (ファーストレスポンダーになります)。
スコープ バー ボタンを使用して、キーボードを表示せずにテーブル アイテムをフィルタリングできるようにすることはできますか? ユーザーは、検索テキスト入力フィールド内を具体的にタップすることで、キーボードを表示できます。
My solution in the end involved the use of two delegate methods and a state variable on the view controller.
On the view controller i added the property
NSNumber *scopeButtonPressedIndexNumber;
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
if (self.scopeButtonPressedIndexNumber != nil) {
self.scopeButtonPressedIndexNumber = nil; //reset
return NO;
}
else {
return YES;
}
}
- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope {
self.scopeButtonPressedIndexNumber = [NSNumber numberWithInt:selectedScope];
}
In essence, I capture if the scope button is pressed, and I return NO in shouldBeginEditing if that is the case. In this way, I was able to prevent focus from going to the search bar.
もちろん。実装は UITableView の設定方法によって異なりますが、NSFetchedResultsControllers を使用していると仮定すると、次のようにすることができます。
1) 3 つのスコープ バー ボタンがあるとします。4 つの NSFRC を作成します。
2) 最初の 3 つの NSFRC のフェッチ要求を作成します。それぞれに、対応するスコープ バー ボタンに関連するスコープのみを選択する述語があります。
3) 検索機能に最終的な NSFRC を使用します。まだ検索を実装していない場合は、検索を実装する方法の詳細について、UISearchDisplayController/UISearchBar を使用して NSFetchedResultsController (CoreData) をフィルター処理する方法に関する Brent Piddy の投稿を参照してください。
4) ユーザーがスコープ バーのボタンをタップしたとき、検索バーにテキストを書き込まず、関連する NFC をスワップするだけです。ボタンを強調表示 (または UISegmentedControl の使用を検討) して、ユーザーが見ているスコープを確認できるようにします。
5) ユーザーが検索バーにテキストを入力したら、上記の Brent の投稿で詳しく説明されているように、検索バー NSFRC を入れ替えます。ボタンまたは UISegmentedControl の強調表示をすべて削除し、画面上の検索バーにユーザーのテキストを残して、ユーザーが見ている範囲を確認できるようにします。