5

Vorrei aggiungere una barra di ricerca per un UICollectionViewController, che è incorporato nel seguente modo: (!) UITabBarController> UINavigationbarController> UICollectionViewController> SearchBar In questa prospettiva, la barra di ricerca sostituirebbe la Barra di navigazione.aggiungendo UISearchBar a UICollectionviewController incorporato in navigationController IOS6

Sotto lo stesso disegno, se provo quanto sopra con un UITableViewController, la barra di ricerca si presenta bene (sia a livello di codice e via Storyboard)

problema è che non posso ottenere di aggiungere la barra di ricerca sopra l'UICollectionViewController quando uso il framework StoryBoard; si trova proprio nel mezzo della vista, e io sono senza tracce su come spostarlo verso l'alto. Inoltre, appare sempre sotto UICollectionview, quindi non è visibile.

Così, prendendo l'altra strada, a livello di codice:

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

Con questo, la barra di ricerca si presenta bene. Sfortunatamente, quando digito del testo, scompare al di sopra della vista, presumibilmente perché la barra di navigazione sottostante lo fa (non so perché ...)

Non so esattamente perché la barra di ricerca sia soddisfacente con un UITableViewController, e perché è così doloroso per un UICollectionViewController. Detto questo, chiunque ha idea del motivo per cui la barra di navigazione/navBar scompare e come posso risolvere il problema?

Qualsiasi soluzione è il benvenuto ..

grazie! -A

risposta

8

Aggiungere un'intestazione e inserire lo SearchBar in quello (è ciò che ho fatto in passato). Detto questo, ho preso l'abitudine di quasi mai utilizzare uno UITableViewController (a meno che non sto implementando uno StaticCell) o uno UICollectionViewController. Quello che vorrei suggerire è di implementare uno standard UIViewController e aggiungere semplicemente il tuo UICollectionView. Ridimensiona il numero CollectionView e aggiungi lo SearchBar in alto. Questo ti permette di avere un SearchBar che viene sempre visualizzato (che i miei utenti generalmente preferiscono di dover scorrere verso l'alto per modificare, modificare una ricerca)

+1

Grazie! Questa potrebbe essere una soluzione che dovrò considerare, concordo, poiché sembra che UICollectionviewController utilizzi il 100% della vista. Mi piacerebbe avere la barra di ricerca nascosta/visibile su richiesta, quindi la barra di navigazione ha fornito una facile via d'uscita. Fare lo stesso con un UIViewController, pur consentendo il corretto ridimensionamento della vista uicollection, richiederà qualche rielaborazione. Preferirei evitarlo se potessi. per adesso. – Alex

+0

Hai provato ad aggiungere la barra di ricerca alla vista dell'intestazione? –

+0

In un'intestazione no, poiché questa opzione non è quella che sto cercando (la barra di ricerca scorrerà con la vista). Potrei provare l'altro - UIViewController - anche se tendo a pensare che dovrei conformarmi alla coppia UICollectionViewController/UICollectionView. – Alex

8

Io uso il seguente codice per aggiungere un UISearchBar a UICollectionViewController. Purtroppo non riesco a far funzionare 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

Ciao Eugene, grazie! In realtà, questa è praticamente la soluzione di Jay, che non era esattamente ciò di cui avevo bisogno. Nel frattempo, ho trovato questo: http://stackoverflow.com/questions/10617330/uisearchbar-in-uinavigationbar-changes-width-when-rotating-orientation?rq=1, che funziona bene per le mie esigenze. Saluti. – Alex

+0

Oltre a questo approccio, è possibile impostare la proprietà headerReferenceSize del layout come CGSizeMake (320.0,44.0) in modo che il contenuto inizi dopo il punto 44.0 –

+0

grazie buona risposta – Shashi3456643