2015-11-18 21 views
7

Ho UISearchController e UITableView. Il Codice in viewDidLoad è:UISearchController dimsBackgroundDuringPresentation solo quando il testo di ricerca è vuoto

self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 
self.searchController.searchResultsUpdater = self; 
self.searchController.dimsBackgroundDuringPresentation = YES; 
[self.searchController.searchBar sizeToFit]; 
self.searchController.searchBar.delegate = self; 
self.searchController.delegate = self; 

self.tableView.tableHeaderView = self.searchController.searchBar; 
self.tableView.userInteractionEnabled = YES; 

Voglio la vista grigia da apparso ogni volta che si tocca sulla barra di ricerca e quando si digita, la vista grigio scompare e mostra il tableView modo che io possa toccare le cellule . Questo significa che la visualizzazione grigia viene visualizzata solo quando la barra di ricerca è vuota (proprio come il comportamento di ricerca predefinito in App Mail and Contacts). Ho cercato di impostare il

self.searchController.dimsBackgroundDuringPresentation 

nel metodo delegato basato sul searchBar.text

-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 

ma non funziona. Qualche idea?

Grazie,

+0

Ecco come funziona dimsBackgroundDuringPresentation. Come stai implementando uisearchcontroller? Non attenuerà solo i risultati della ricerca. Sembra che tu probabilmente non ne presenti nessuno. – beyowulf

+0

Questo è tutto quello che ho fatto per UISearchController. tutto il resto è implementato dalla vista tabella e (void) updateSearchResultsForSearchController: (UISearchController *) searchController ricarica la vista tabla in base al testo di ricerca. c'è qualche altra cosa che devo fare? – Missa

+1

Sfortunatamente è più complicato di così. Devi cercare l'origine dati del tuo tableview e trovare i risultati di ricerca, quindi presentarli all'utente. Puoi trovare un tutorial su come farlo qui: http://www.jhof.me/simple-uisearchcontroller-implementation/ – beyowulf

risposta

0

ho aggiunto visualizzazione secondaria per la tabella quando la tabella spettacolo e impostare il colore grigio e Alpha. quando Ignora SearchController ha rimosso la sottoview. Ho impostato la proprietà dim come falsa. Il mio codice come muggito potrebbe aiutarti. Ho usato la stessa tabella per mostrare il risultato della ricerca.

// on header file 
UIView *dimView = null; 

//on .m file 

     // create DimView for SearchControl 
    - (void)showDimView 
    { 
     if(dimView == nil && self.searchController.active) 
     { 
      CGRect rcReplacementView = self.tableView.frame; 
      dimView = [[UIView alloc] initWithFrame:rcReplacementView]; 
      dimView.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
      dimView.backgroundColor = [UIColor blackColor]; 
      dimView.alpha = 0.5; 
      [self.view addSubview:dimView]; 
      self.tableView.scrollEnabled = NO; 

      //tap event for hide seachcontroll 
      UITapGestureRecognizer *singleFingerTap = 
      [[UITapGestureRecognizer alloc] initWithTarget:self 
                action:@selector(handleSingleTap:)]; 
      [dimView addGestureRecognizer:singleFingerTap]; 
      [singleFingerTap release]; 
     } 
    } 

//close SearchController if Tap on view 
- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer { 

    if(searchController.searchBar.text.length <= 0) 
    { 
     [self.searchController setActive:NO]; 
    } 
} 

// do something before the search controller is dismissed 
- (void)willDismissSearchController:(UISearchController *)searchController { 

    if(dimView != nil) 
    { 
     [dimView removeFromSuperview]; 
     dimView = nil; 
    } 
    self.tableView.scrollEnabled = YES; 
} 
+1

Grazie, preferisco implementare l'implementazione standard da Apple. – Missa

1

self.searchController.dimsBackgroundDuringPresentation = YES è utile se si utilizza un altro controller della vista per searchResultsController Ma nel codice si utilizza la visualizzazione corrente per mostrare i risultati ([[UISearchController alloc] initWithSearchResultsController:nil]).

Desidero visualizzare la vista grigia ogni volta che tocchi la barra di ricerca e quando inizio a digitare, la vista grigia scompare e mostra la tabellaVisualizza così posso toccare le celle.

Questo è il comportamento predefinito se si utilizza un altro controller di visualizzazione per searchResultsController.

+0

Penso che Apple dovrebbe disabilitare questo effetto strano e inutile attraverso l'eccezione o potrebbe essere un avviso nel registro ... Voglio dire se si seleziona searchResultsController come corrente (nil), quindi dimsBackgroundDuringPresentation non dovrebbe mai essere YES. – faviomob

Problemi correlati