У меня есть UITableViewController, который я указал как UISearchBarDelegate.До сих пор я программно добавлял UISearchBar к заголовку таблицы, и проблем не было.
Я начал исчерпывать пространство экрана, поэтому решил убить свой обычный заголовок UINavigationController (которыйбыл текст), и добавил следующий код, перемещая мою панель поиска из таблицы в 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];
Этот код работает, как и ожидалось - моя UINavigationBar теперь является UISearchBar.Однако мой метод делегата:
/** Only show the cancel button when the keyboard is displayed */
- (void) searchBarDidBeginEditing:(UISearchBar*) lclSearchBar
{
lclSearchBar.showsCancelButton = YES;
}
... больше не вызывается.Я установил точку останова и подтвердил, что делегат UISearchBar действительно сам, контроллер представления.Как ни странно, этот метод делегата все еще вызывается просто отлично:
/** Run the search and resign the keyboard */
- (void) searchBarSearchButtonClicked:(UISearchBar *)lclSearchBar
{
_deepSearchRan = NO;
[self runSearchForString:[[self _searchBar] text] isSlowSearch:NO];
[lclSearchBar resignFirstResponder];
}
Есть идеи, почему UINavigationBar проглатывает мои вызовы делегатов ??Чего мне не хватает?