2010-06-13 17 views
5

Ich habe einen UITableViewController, den ich als UISearchBarDelegate angegeben habe. Bis jetzt hatte ich die UISearchBar programmatisch zur headerView der Tabelle hinzugefügt, und es gab keine Probleme.UISearchBar-Delegat wird nicht aufgerufen, wenn UINavigationBar titleVIEW verwendet wird?

Ich begann aus Bildschirm Immobilien zu laufen, so habe ich beschlossen, meinen normalen UINavigationController Titel den folgenden Code (das war Text), zu töten, und fügte hinzu, meine SearchBar aus der Tabelle auf den UINavigationBar bewegen:

// (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]; 

Dieser Code funktioniert wie erwartet - meine UINavigationBar ist jetzt eine UISearchBar. jedoch meine Delegatmethode:

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

... wird nicht mehr genannt werden. Ich habe gebrochen, und ich habe bestätigt, dass der Delegierte der UISearchBar tatsächlich selbst ist, der View-Controller. Merkwürdig ist, wird diese Delegatmethode noch ganz gut genannt:

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

Irgendwelche Ideen, warum UINavigationBar meine Delegierten Anrufe schluckt ?? Was vermisse ich?

Antwort

7

Ich denke, Sie schreiben die falsche Methodensignatur. Es sollte sein: - searchBarTextDidBeginEditing: Hier sind alle UISearchBarDelegate-Methoden für die Textbearbeitung.

– searchBar:textDidChange: 

– searchBar:shouldChangeTextInRange:replacementText: 

– searchBarShouldBeginEditing: 

– searchBarTextDidBeginEditing: 

– searchBarShouldEndEditing: 

– searchBarTextDidEndEditing: 

UISearchBarDelegate

+0

Vielen Dank, ich einen zweiten Satz von Augen benötigt, das zu sehen. Hätte das UISearchBarDelegate-Protokoll noch einmal überprüfen müssen! Das hat es behoben. – makdad

+0

Das ist normal. XCode unterstützt die automatische Vervollständigung und Überprüfung schlecht. Ich habe auch denselben Fehler bei der Delegierung und Vererbung gemacht. Ich sehe ViewWillAppear {} anstelle von viewWillAppear: (BOOL) oft animiert – vodkhang

Verwandte Themen