2011-08-30 16 views

risposta

13

L'ho risolto io stesso.

Cancel Button>

(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller { 
    [controller.searchBar setShowsCancelButton:YES animated:NO]; 
    for (UIView *subview in [controller.searchBar subviews]) { 
     if ([subview isKindOfClass:[UIButton class]]) { 
      [(UIButton *)subview setTitle:@"_____" forState:UIControlStateNormal]; 
     } 
    } 
} 

Nessun risultato Testo>

- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView { 
    if (!isChangedNoResults) { 
     if ([contactManager.filteredPeople count] == 0) { 
      [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(changeNoResultsTextToKorean:) userInfo:nil repeats:YES]; 
     } 
    } 
} 

Io uso timer e bool valore. Se nessun timer, non può cambiare il testo quando "Nessun risultato" viene visualizzato per primo.

- (void)changeNoResultsTextToKorean:(NSTimer *)timer { 
    if (isChangedNoResults) { 
     [timer invalidate]; 
    } 
    else { 
     for (UIView *subview in [self.searchDisplayController.searchResultsTableView subviews]) { 
      if ([subview isKindOfClass:[UILabel class]]) { 
       UILabel *targetLabel = (UILabel *)subview; 
       if ([targetLabel.text isEqualToString:@"No Results"]) { 
        NSLog(@"Changed!"); 
        [targetLabel setText:@"_____"]; 
        isChangedNoResults = YES; 
        [timer invalidate]; 
       } 
      } 
     } 
    } 
} 
+0

c'è comunque da fare senza cercare le sottoview in iOS 5.0 e Arc? – inforeqd

+0

Forse questo non è necessario in iOS5 + – ChangUZ

+0

Ho scritto un articolo pertinente su questi tipi di problemi: http://artsy.github.com/blog/2012/05/11/on-making-it-personal--in-iOS -with-searchbars/ – orta

4

Grazie ChangUZ per aver trovato un modo. Ora, per migliorare, non è necessario un timer per modificare l'etichetta "Nessun risultato".

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString 
{ 
    dispatch_async(dispatch_get_main_queue(), ^(void) { 
     for (UIView *v in controller.searchResultsTableView.subviews) { 
      if ([v isKindOfClass:[UILabel self]]) { 
       ((UILabel *)v).text = @"_____"; 
       break; 
      } 
     } 
    }); 
    return YES; 
} 
5

Al fine di modificare il testo "nessun risultato" è possibile utilizzare:

[self.searchDisplayController setValue:@"my no result text" forKey: @"noResultsMessage"]; 

ho appena testato in iOS 8

+0

Testato su iOS7 e iOS8. Funziona come un incantesimo. – tounaobun

+0

ha funzionato bene su iOS 9.1 – drshock

0

Una soluzione più semplice per modificare il testo pulsante Annulla:

[self.searchDisplayController.searchBar setValue:@"custom text" forKey:@"cancelButtonText"]; 

testato in iOS 10

Problemi correlati