1

読み込み時に検索バーとスコープ バー ボタンを含む UITableView を表示します。ユーザーがスコープ バー ボタンをタップすると、キーボードが表示され、検索バーがフォーカスされます (ファーストレスポンダーになります)。

スコープ バー ボタンを使用して、キーボードを表示せずにテーブル アイテムをフィルタリングできるようにすることはできますか? ユーザーは、検索テキスト入力フィールド内を具体的にタップすることで、キーボードを表示できます。

4

2 に答える 2

5

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.

于 2012-05-24T06:05:23.917 に答える
1

もちろん。実装は UITableView の設定方法によって異なりますが、NSFetchedResultsControllers を使用していると仮定すると、次のようにすることができます。

1) 3 つのスコープ バー ボタンがあるとします。4 つの NSFRC を作成します。

2) 最初の 3 つの NSFRC のフェッチ要求を作成します。それぞれに、対応するスコープ バー ボタンに関連するスコープのみを選択する述語があります。

3) 検索機能に最終的な NSFRC を使用します。まだ検索を実装していない場合は、検索を実装する方法の詳細について、UISearchDisplayController/UISearchBar を使用して NSFetchedResultsController (CoreData) をフィルター処理する方法に関する Brent Piddy の投稿を参照してください。

4) ユーザーがスコープ バーのボタンをタップしたとき、検索バーにテキストを書き込まず、関連する NFC をスワップするだけですボタンを強調表示 (または UISegmentedControl の使用を検討) して、ユーザーが見ているスコープを確認できるようにします。

5) ユーザーが検索バーにテキストを入力したら、上記の Brent の投稿で詳しく説明されているように、検索バー NSFRC を入れ替えます。ボタンまたは UISegmentedControl の強調表示をすべて削除し、画面上の検索バーにユーザーのテキストを残して、ユーザーが見ている範囲を確認できるようにします。

于 2012-05-22T21:36:27.743 に答える