3

コレクション ビューに検索バーを追加しようとしています。私が実装したいのは、- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchTextメソッドを使用してデータをフィルタリングすることです。

テーブルビューを使用すると、すべてうまくいきました。テーブルビューでUISearchBarusingメソッドを追加するとほぼ同じ警告が出ましたが、 usingメソッドaddSubViewを追加すると消えました。UISearchBarsetTableHeaderView

ただし、コレクション ビューでは、テーブル ビューと同じように動作するメソッドは存在しません。そこでUISearchBar、以下のように補足ヘッダー ビューに追加しました。

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
    UICollectionReusableView *reusableView;
    if (kind == UICollectionElementKindSectionHeader) {
        reusableView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"HeaderView" forIndexPath:indexPath];
        [reusableView addSubview:self.searchBar];
    }
    return reusableView;
}

この方法でオブジェクトを追加するとUISearchBar、「コレクション ビューのファーストレスポンダー ビューを設定していますが、そのタイプ (セル/ヘッダー/フッター) がわかりませんか?」という警告が表示されます。検索バーをタップするたびに。

警告以外は問題なく動作しているように見えましたが、何かを入力すると問題が発生します。1 文字入力するとキーボード入力ビューがダウンするので、検索を続けるには検索バーをもう一度タップする必要があります。検索したい単語が 5 文字の単語の場合、検索バーを 4 回タップする必要があります。それはひどいです。

これは警告のために発生すると思います。警告コンテキストでグーグル検索したところ、これに関連するスタックオーバーフローに関する唯一の記事が見つかりました。(他にもTable View関連の記事がありました。いずれも を使えば直るようsetTableHeaderViewです。)

記事はこちらです。

しかし、私は iOS 開発者プログラムに登録していないので、その記事を読むことができません。これで私を助けてくれる人はいますか?,

4

2 に答える 2

2

これは、collectionview で「reloadData」が呼び出されたときにヘッダー ビューがリロードされ、検索バーがファーストレスポンダーのステータスを失うために発生します。私が見つけた唯一の回避策は、アクティブな検索が行われているときのBOOLを保持し、そうであれば、コレクションビューの「cellForItemAtIndexPath」で検索バーをfirstResponderに設定することです。

if(activeSearch && ![searchBar isFirstResponder])
{
    [searchBar becomeFirstResponder];
}
于 2013-05-03T20:04:54.077 に答える
0
This is  happening  because reloadData will also reloading the header. 

つまり、古いヘッダーはコレクション ビューから削除され、キューに入れられ、dataSource 実装時に再利用されます。

この警告について心配する必要はありません。この警告は無視してかまいません

于 2013-01-26T16:22:38.040 に答える