1

私はobjCが初めてで、現在UISearchDisplayControllerを実験しています。基本的に、データとして文字列の配列があり、UISearchBarDisplayController を使用してデータをフィルタリングします。searchText を検索バーに入力すると、正しい値を取得できます。ただし、searhBar テキストが空の場合、tableView は消えます。

このような場合にtableViewが非表示になるのを防ぐことは可能でしょうか。私が望むのは、searchBar テキストが空の場合に、配列内のすべての値をテーブルに表示することです。

テーブルの hidden/alpha/frame プロパティを確認し、ここで問題を修正しようとしましたが、ここで間違ったパスにいると思います。UISearchDisplayController をサブクラス化し、[setActive:YES animation:YES];? をオーバーライドする必要があるかどうかを考えています。ヒントをいただければ幸いです。

4

3 に答える 3

0

文字列が空の場合を含め、検索パラメータが変更された場合は、イベントを受け取る必要があります。

そのデリゲート メソッドの実装を変更して、文字列が空かどうかを確認すると、フィルター処理されたデータではなく元のデータを返すことができます。これにより、サブクラス化を必要とせずに、求めていることが達成されるはずです。

于 2012-06-14T07:32:43.930 に答える
0

検索テキストフィールドに常にゼロスペース幅の文字を残すことで試すことができます:

static NSString* zsp = @"\u200B";

//In the UISearchBarDelegate

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if(searchBar.text.length == 1 && [text isEqualToString:@""])
    {
        searchBar.text = zsp;
        return NO;
    }

    return YES;
}
于 2014-07-31T10:06:40.130 に答える
0

私はUISearchBarとUITableで作業することになりました。だからここに私が遭遇したシナリオがあります。

  1. searchBar がクリックされたときに UITable を表示します。
  2. UITable は、searchText が空の場合、plist のすべてのデータを表示します。
  3. UITable は、searchText に一致する plist からフィルター処理された結果を示します。
  4. 検索ボタンを押したときにキーボードを閉じますが、searchBar のキャンセル ボタンを無効にしないでください。
  5. キャンセルボタンが押されたときに UITable を削除します。

今のところ、テーブルを表示するためのアニメーションはありませんが、これでうまくいきます。また、検索中にユーザーの操作とテーブルのスクロールを許可したため、この場合はオーバーレイは必要ありません。今はうまくいっています。:)

必要な方のためにサンプルプロジェクトを作成しました。ここにリンクがあります。乱雑なコードとリークの問題についてお詫び申し上げます。これを投稿して共有しました。:)

于 2012-06-15T04:51:11.090 に答える