2010-06-13 2 views
5

Ho un UITableViewController che ho specificato come UISearchBarDelegate. Fino ad ora, avevo programmaticamente aggiunto UISearchBar all'headViewView della tabella, e non c'erano problemi.Il delegato UISearchBar non viene chiamato quando viene utilizzato come titolo UINavigationBar?

ho cominciato a corto di bene immobile dello schermo, così ho deciso di uccidere il mio normale titolo UINavigationController (che era di testo), e ha aggiunto il seguente codice, spostando il mio SearchBar dal tavolo alla UINavigationBar:

// (Called in viewDidLoad) 
// Programmatically make UISearchBar 
UISearchBar *tmpSearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0,0,320,45)]; 
tmpSearchBar.delegate = self; 
tmpSearchBar.showsCancelButton = YES; 
tmpSearchBar.autocorrectionType = UITextAutocorrectionTypeNo; 
tmpSearchBar.autocapitalizationType = UITextAutocapitalizationTypeNone; 
[self set_searchBar:tmpSearchBar]; 
[tmpSearchBar release]; 
self.navigationItem.titleView = [self _searchBar]; 

Questo codice funziona come previsto - la mia UINavigationBar ora è una UISearchBar. Tuttavia, il mio metodo delegato:

/** Only show the cancel button when the keyboard is displayed */ 
- (void) searchBarDidBeginEditing:(UISearchBar*) lclSearchBar 
{ 
    lclSearchBar.showsCancelButton = YES; 
} 

... non viene più chiamato. Ho rottamato e ho confermato che il delegato di UISearchBar è davvero autonomo, il controller della vista. Stranamente, questo metodo delegato si chiama ancora bene:

/** Run the search and resign the keyboard */ 
- (void) searchBarSearchButtonClicked:(UISearchBar *)lclSearchBar 
{ 
    _deepSearchRan = NO; 
    [self runSearchForString:[[self _searchBar] text] isSlowSearch:NO]; 
    [lclSearchBar resignFirstResponder]; 
} 

Tutte le idee perché UINavigationBar sta inghiottendo le mie chiamate delegato ?? Cosa mi manca?

risposta

7

Penso che si scriva la firma del metodo sbagliato. Dovrebbe essere: - searchBarTextDidBeginEditing: Ecco tutti i metodi UISearchBarDelegate per la modifica del testo.

– searchBar:textDidChange: 

– searchBar:shouldChangeTextInRange:replacementText: 

– searchBarShouldBeginEditing: 

– searchBarTextDidBeginEditing: 

– searchBarShouldEndEditing: 

– searchBarTextDidEndEditing: 

UISearchBarDelegate

+0

Grazie, avevo bisogno di una seconda serie di occhi per vedere che. Dovrebbe aver controllato ancora una volta il protocollo UISearchBarDelegate! Questo l'ha risolto. – makdad

+0

È normale. XCode supporta malamente il completamento e il controllo automatico. Ho anche fatto lo stesso errore con i delegati e l'ereditarietà. Faccio spesso viewWillAppear {} invece di viewWillAppear: (BOOL) animato – vodkhang