将UISearchBar添加到嵌入到NavigationController IOS6中的UICollectionviewController

时间:2012-12-04 15:20:19

标签: ios uinavigationcontroller uisearchbar uicollectionview

我想将一个搜索栏添加到UICollectionViewController,它嵌入了以下方式: UItabbarController> UINavigationbarController> UICollectionViewController>搜索栏 (!) 在此视图中,搜索栏将替换NavigationBar。

在相同的设计下,如果我使用UITableViewController测试上面的内容,搜索栏会显示正常(以编程方式和通过Storyboard显示)

问题是当我使用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

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分: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];
}
相关问题