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?
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
È 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