5

次の方法で埋め込まれた UICollectionViewController に検索バーを追加したいと思います: UItabbarController > UINavigationbarController > UICollectionViewController > SearchBar (!) このビューでは、検索バーが NavigationBar を置き換えます。

同じ設計で、UITableViewController を使用して上記をテストすると、検索バーが正常に表示されます (プログラムとストーリーボードの両方で)。

問題は、StoryBoard フレームワークを使用すると、UICollectionViewController に検索バーを追加できないことです。ビューの真ん中にあるだけで、一番上に移動する方法がわかりません。さらに、常に UICollectionview の下に表示されるため、表示されません。

したがって、プログラムで別のルートを取ります。

-(void)viewWillAppear:(BOOL)animated{
self.searchBarTop = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
[self.searchBarTop setPlaceholder:@"Enter your command here"];
self.searchDC = [[UISearchDisplayController alloc]initWithSearchBar:self.searchBarTop contentsController:self];
self.searchBarTop.delegate = self;

[[self navigationController] setNavigationBarHidden:NO animated:animated];
[self.navigationController.navigationBar addSubview:self.searchBarTop];
}

これで、検索バーが正常に表示されます。しかし、残念なことに、テキストを入力すると、ビューの上に消えます-おそらく、基になるnavBarがそうしているためです-(理由はわかりません...)

検索バーが UITableViewController で問題ない理由と、UICollectionViewController にとってなぜそれほど苦痛なのか、正確にはわかりません。そうは言っても、検索バー/ナビゲーションバーが消える理由と、それを修正する方法についての手がかりは誰にもありますか?

どんな解決策でも大歓迎です..

ありがとう !-A

4

2 に答える 2

8

ヘッダーを追加し、そのSearchBar中に入れます(これは私が過去に行ったことです)。UITableViewControllerそうは言っても、私は a ( a を実装していない限りStaticCell TableView) または aをほとんど使用しないという習慣を身につけていUICollectionViewControllerます。私が提案するのは、標準を実装しUIViewController、あなたのUICollectionView. サイズCollectionViewを少し小さくして、上に置きSearchBarます。これにより、SearchBar常に表示される を使用できます (私のユーザーは、検索を変更、編集するために一番上までスクロールするよりも一般的に好んで使用します)。

于 2012-12-04T15:42:34.413 に答える
8

次のコードを使用して、UISearchBar を UICollectionViewController に追加します。残念ながら、UISearchDisplayController を機能させることができませんでした。

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.collectionView.frame), 44)];
    self.searchBar.autocorrectionType = UITextAutocorrectionTypeNo;
    self.searchBar.delegate = self;
    [self.collectionView addSubview:self.searchBar];
    [self.collectionView setContentOffset:CGPointMake(0, 44)];
}

- (void) viewWillAppear:(BOOL)animated{
    // to show search bar
    [self.collectionView setContentOffset:CGPointMake(0, 0)];
    // to hide search bar
    [self.collectionView setContentOffset:CGPointMake(0, 44)];
}

-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
    [searchBar setShowsCancelButton:YES animated:YES];
}

-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
    [searchBar setText:@""];
    [searchBar setShowsCancelButton:NO animated:YES];
    [searchBar resignFirstResponder];
}
于 2013-01-07T21:50:17.477 に答える