16

UISearchDisplayController を UITableViewController と共に使用する場合、ユーザーが検索バーをタップするとアニメーション化されてナビゲーション バーが置き換えられます。

UICollectionViewController の上部で UISearchBar を使用するときに、同じ効果を得たいと思います。何か案は?

4

3 に答える 3

2

UICollectionReusableViewのサブビューとしてプログラムでsearchBarを追加する必要がありましたが、アウトレットを割り当てるときにプロトタイプエラーが発生し続けたため、IBを介してsearchBarを機能させることはできませんでした。実装ファイルに検索バーを追加すると、うまくいきました。

関連する方法は次のとおりです。

-(void)viewDidLoad
{
    [super viewDidLoad];
    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:CellIdentifier];
    _objectChanges = [NSMutableArray array];
    _sectionChanges = [NSMutableArray array];
    [self performFetch];
    searchBar = [[UISearchBar alloc]
                  initWithFrame:CGRectMake(0.0, 50.0, self.view.bounds.size.width,
                                           44.0)];
    searchBar.placeholder = @"Search for channels";
    searchBar.tintColor = [UIColor blackColor];
    searchBar.delegate = self;
}


-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
    SupplementaryView *header = nil;

    if ([kind isEqual:UICollectionElementKindSectionHeader])
    {
        header = [self.collectionView dequeueReusableSupplementaryViewOfKind:kind
                                                    withReuseIdentifier:@"reuseHeader"
                                                           forIndexPath:indexPath];

        [header addSubview:searchBar];

    }
    return header;
}
于 2012-12-06T05:08:06.670 に答える
1

私は同じ問い合わせをしたばかりで、UISearchDisplayController の書き換えを必要としない、中途半端ではあるが実用的なソリューションを思いつきました。

(最終結果: UITableView -- shouldReloadTableForSearchString に応答するもの -- UICollectionView の上にオーバーレイされ、検索をクリックすると閉じられ、collectionView に結果が表示されます。興味がある場合は読み進めてください)

IB で、挿入した UIViewController を作成しました (スクリーンショットを参照): レイアウト用のビュー --> 最初に UISearchBar とディスプレイ コントローラーをドロップしました。同じビュー (並べて表示) に、カスタム UICollectionViewCell を持つ UICollectionView をドロップしました。次に、UITableViewProvider をドロップしました (カスタム UITableCell を使用しますが、これは必須ではありません。スクリーンショットの UITabBarItem と Nav アイテムを無視することもできます。これは重要ではありません)。

UITableView の高さを 0 に設定し、すべてのアウトレットとデリゲートを配線しました。最終的な結果は次のようになります。カーソルが UISearchBox に入ると、UICollectionView の上に UITableView オーバーレイが表示されます。結果は tableView に表示されます。searchBarSearchButtonClicked では、UICollectionView の dataSource を設定し、そのアウトレットで reloadData を呼び出すだけです。

Apple は検索表示コントローラーをジェネリック化すべきだと考える人もいるでしょう。おそらく将来のリリースで?

(これは、UISearchDisplay コントローラーが最適化される方法であるため機能します。IIRC には、文字エントリごとに 1 つの UITableView が実際に積み重ねられています)

(かなり複雑なため、コードを掲載していません。簡単でない点がある場合はお問い合わせください)

ここに画像の説明を入力

于 2012-12-08T04:35:18.697 に答える
0

ここに迅速なコードがあります-私にとってはうまくいきました!

func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {

    let headerView = self.mainPictureCollectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "headerView", forIndexPath: indexPath)

    headerView.addSubview(searchBar)
    return headerView
}
于 2015-11-30T13:19:30.543 に答える