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 来说如此痛苦。也就是说,任何人都知道为什么搜索栏/导航栏消失了,我该如何解决?

欢迎任何解决方案..

谢谢 !-一个

4

2 回答 2

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 回答
8

添加一个标题并将其放入SearchBar其中(这就是我过去所做的)。话虽如此,我已经养成了几乎从不使用 a UITableViewController(除非我正在实现 a StaticCell TableView)或 a的习惯UICollectionViewController。我的建议是实施一个标准UIViewController,然后添加你的UICollectionView. CollectionView缩小一些尺寸并将其放在SearchBar顶部。这使您可以SearchBar始终显示一个(我的用户通常更喜欢滚动到顶部来更改、编辑搜索)

于 2012-12-04T15:42:34.413 回答