2012-12-04 10 views
5

Chciałbym dodać searchbar do UICollectionViewController, który jest osadzony w następujący sposób: (!) UITabBarController> UINavigationbarController> UICollectionViewController> SearchBar w tym widoku, pasek wyszukiwania by zastąpić Pasek nawigacyjny.dodanie UISearchBar do UICollectionviewController osadzony NavigationController iOS6

mocy tego samego projektu, jeśli przetestować wyżej z UITableViewController, paska wyszukiwania pojawia się w porządku (zarówno programowo i przez Storyboard)

Problem Nie mogę dodać pasek wyszukiwania na UICollectionViewController kiedy używam framework StoryBoard; po prostu siedzi w środku widoku i nie mam pojęcia, jak przenieść go na szczyt. Dodatkowo zawsze pojawia się pod widokiem UICollection, więc nie jest widoczny.

Więc, biorąc drugą trasą, programowo:

-(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]; 
} 

z tym, pasek wyszukiwania pokazuje się grzywnę. Ale niestety, kiedy wpisuję jakiś tekst, znika on nad widokiem - prawdopodobnie dlatego, że bazowy navBar tak robi - (nie wiem dlaczego ...)

Nie jestem do końca pewien, dlaczego pasek wyszukiwania jest w porządku kontroler UITableViewController i dlaczego jest to uciążliwe dla kontrolera UICollectionViewController. Ktoś powiedział, że ktoś ma pojęcie, dlaczego pasek wyszukiwania/navBar zniknął i jak mogę to naprawić?

Każde rozwiązanie jest mile widziane ..

dziękuję! -A

Odpowiedz

8

Dodaj nagłówek i umieść w nim SearchBar (czyli to, co zrobiłem w przeszłości). Biorąc to pod uwagę, nabrałem nawyku prawie nigdy nie używając ani UITableViewController (chyba że implementuję StaticCellTableView) lub UICollectionViewController. Proponuję zastosować standard UIViewController i po prostu dodać do swojego UICollectionView. Zmień rozmiar CollectionView i umieść SearchBar u góry. Dzięki temu można zawsze wyświetlać komunikat o błędzie SearchBar (który moi użytkownicy ogólnie lubią lepiej niż przewijanie do góry w celu zmiany, edytowania wyszukiwania)

+1

Dzięki! To może być rozwiązanie, które muszę rozważyć, zgadzam się, ponieważ wygląda na to, że UICollectionviewController używa 100% widoku. Chciałbym, aby pasek wyszukiwania był ukryty/widoczny na żądanie, więc navBar zapewnił łatwe wyjście. Wykonanie tego samego z kontrolerem UIViewController, przy jednoczesnym umożliwieniu poprawnego rozmiaru obrazka wymaga trochę przeróbek. Wolałbym tego uniknąć, jeśli mogę. Na razie. – Alex

+0

Czy próbowałeś dodać pole wyszukiwania do widoku nagłówka? –

+0

W nagłówku nie, ponieważ ta opcja nie jest tym, czego szukam (pasek wyszukiwania będzie przewijany widokiem). Mogę wypróbować drugą - UIViewController - choć wydaje mi się, że powinienem dostosować się do pary UICollectionViewController/UICollectionView. – Alex

8

Poniższy kod służy do dodawania paska UISearch do kontrolera UICollectionViewController. Niestety, nie mogłem uruchomić programu 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]; 
} 
+0

Witaj Eugene, dzięki! Właściwie to jest to rozwiązanie Jaya, które nie było dokładnie tym, czego potrzebowałem. W międzyczasie znalazłem ten: http://stackoverflow.com/questions/10617330/uisearchbar-in-uinavigationbar-changes-width-when-rotating-orientation?rq=1, który działa dobrze dla moich potrzeb. Twoje zdrowie. – Alex

+0

Oprócz tego podejścia można ustawić właściwość headerReferenceSize layoutu jako CGSizeMake (320.0,44.0), aby zawartość została uruchomiona po punkcie 44.0 –

+0

dzięki dobrej odpowiedzi – Shashi3456643

Powiązane problemy