2015-11-18 8 views
7

Ich habe UISearchController und eine UITableView. Der Kodex in viewDidLoad ist:UISearchController dimsBackgroundDuringPresentation nur, wenn der Suchtext leer ist

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; 

ich die graue Ansicht erschien werden soll, wenn ich auf der Suchleiste tippen und wenn ich Eingabe beginnen, die graue Ansicht verschwindet und zeigt die Tableview, so kann ich auf den Zellen tippen . Das bedeutet, dass die graue Ansicht nur angezeigt wird, wenn die Suchleiste leer ist (genau wie das Standardsuchverhalten in E-Mail- und Kontakt-Apps). Ich versuchte, die

self.searchController.dimsBackgroundDuringPresentation 

im Delegatmethode zu basierend auf der searchBar.text

-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 

, aber es funktioniert nicht. Irgendwelche Ideen?

Danke,

+0

So funktioniert dimsBackgroundDuringPresentation. Wie implementieren Sie Uisearchcontroller? Es wird die Suchergebnisse nicht verdunkeln. Scheint so, als würdest du wahrscheinlich keine präsentieren. – beyowulf

+0

Das ist alles was ich für den UISearchController gemacht habe. alles andere wird durch die Tabellenansicht implementiert und (void) updateSearchResultsForSearchController: (UISearchController *) searchController lädt die Tabla-Ansicht basierend auf dem Suchtext neu. Gibt es noch etwas anderes, was ich tun muss? – Missa

+1

Leider ist es komplizierter als das. Sie müssen in der Datenquelle Ihrer Tabellenansicht nach Suchergebnissen suchen und sie dann dem Benutzer präsentieren. Sie können ein Tutorial finden, wie man das hier macht: http://www.jhof.me/simple-uisearchcontroller-implementation/ – beyowulf

Antwort

0

Ich habe SubView für Tisch, wenn Tabelle zeigen, und setzen graue Farbe und Alpha. wenn Dismiss SearchController Unteransicht entfernt. Ich setze Dim-Eigenschaft als falsch. Mein Code wie unten kann Ihnen helfen. Ich habe die gleiche Tabelle verwendet, um das Suchergebnis anzuzeigen.

// 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

Danke, ich bevorzuge es, die Standardimplementierung von Apple zu implementieren. – Missa

1

self.searchController.dimsBackgroundDuringPresentation = YES ist nützlich, wenn Sie eine andere Ansicht-Controller für searchResultsController Aber in Ihrem Code verwenden Sie aktuelle Ansicht verwenden, die Ergebnisse zu zeigen ([[UISearchController alloc] initWithSearchResultsController:nil]).

mag ich die graue Ansicht, wenn ich auf der Suchleiste tippen zu sein scheint, und als ich zu schreiben beginne, verschwindet die graue Ansicht und zeigt die Tableview, so kann ich auf den Zellen erschließen.

Dies ist das Standardverhalten, wenn Sie einen anderen View-Controller für searchResultsController verwenden.

+0

Ich denke, Apple sollte diesen seltsamen und nutzlosen Effekt durch Ausnahme deaktivieren oder kann eine Warnung im Protokoll sein ... Ich meine, wenn Sie SearchResultsController als aktuelle (Nil) wählen, sollte DimsBackgroundDuringPresentation nie JA sein. – faviomob