2010-06-13 23 views
5

Tôi có một UITableViewController mà tôi đã chỉ định là một UISearchBarDelegate. Cho đến bây giờ, tôi đã thêm UISearchBar theo chương trình vào headerView của bảng và không có vấn đề gì.UISearchBar đại biểu không được gọi khi được sử dụng như UINavigationBar titleVIew?

tôi bắt đầu chạy ra khỏi màn hình bất động sản, vì vậy tôi đã quyết định giết tiêu đề UINavigationController bình thường của tôi (đó là văn bản), và thêm đoạn mã sau, di chuyển SearchBar tôi từ bảng để các 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]; 

Mã này hoạt động như mong đợi - UINavigationBar của tôi hiện là UISearchBar. Tuy nhiên, phương thức ủy nhiệm của tôi:

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

... không còn được gọi. Tôi đã phá vỡ, và tôi đã xác nhận rằng đại biểu của UISearchBar thực sự là tự, bộ điều khiển xem. Thật kỳ lạ, phương thức ủy nhiệm này vẫn được gọi là tốt:

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

Bất kỳ ý tưởng nào tại sao UINavigationBar đang nuốt cuộc gọi đại biểu của tôi ?? Tôi đang thiếu gì?

Trả lời

7

Tôi nghĩ bạn viết chữ ký phương thức sai. Nó phải là: - searchBarTextDidBeginEditing: Đây là tất cả các phương pháp UISearchBarDelegate để chỉnh sửa văn bản.

– searchBar:textDidChange: 

– searchBar:shouldChangeTextInRange:replacementText: 

– searchBarShouldBeginEditing: 

– searchBarTextDidBeginEditing: 

– searchBarShouldEndEditing: 

– searchBarTextDidEndEditing: 

UISearchBarDelegate

+0

Cảm ơn bạn, tôi cần một bộ thứ hai của mắt để thấy điều đó. Nên đã kiểm tra giao thức UISearchBarDelegate một lần nữa! Điều đó đã sửa nó. – makdad

+0

Điều đó là bình thường. XCode kém hỗ trợ tự động hoàn thành và kiểm tra. Tôi cũng đã làm một số sai lầm tương tự với đại biểu và thừa kế. Tôi thường làm viewWillAppear {} thay vì viewWillAppear: (BOOL) hoạt hình – vodkhang

Các vấn đề liên quan