2013-10-18 25 views
0

我做了一個自定義的搜索欄,我的應用程序,這裏是類: .H如何使用自定義UISearchBar獲取searchBarDelegate方法?

@interface SearchView : UIView <UITextFieldDelegate, UISearchBarDelegate> 
@property (nonatomic, strong) UITextField *searchField; 
@property (nonatomic, strong) UIButton *searchButton; 
@end 

.M

@implementation SearchView 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 

     CGRect frame = CGRectMake(0, 0, 35, 35); 

     [self.searchButton sizeToFit]; 
     self.alpha = 0.6; 
     self.backgroundColor = [UIColor colorWithRed:206/255.0 green:206/255.0 blue:206/255.0 alpha:.8]; 
     self.searchButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
     //[self.searchButton addTarget:self action:@selector(performSearchQuery) forControlEvents:UIControlEventTouchUpInside]; 
     [self.searchButton setImage:[UIImage imageNamed:@"SearchIcon2"] forState:UIControlStateNormal]; 
     //[self.searchButton sizeToFit]; 
     //self.searchButton.bounds.size.height = ; 
     self.searchButton.frame = frame; 
    // self.searchButton.right = frame.size.width - kPadding; 
     [self addSubview:self.searchButton]; 

     self.searchField = [[UITextField alloc] initWithFrame:CGRectMake(43, -5, 270, 50)]; 
     //self.searchField.placeholder = [@"Search..." uppercaseString]; 
     self.searchField.delegate = self; 
     self.searchField.autocorrectionType = UITextAutocorrectionTypeNo; 
     self.searchField.autocapitalizationType = UITextAutocapitalizationTypeWords; 
     self.searchField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 
     self.searchField.returnKeyType = UIReturnKeySearch; 
     self.searchField.clearsOnBeginEditing = YES; 
     self.searchField.clearButtonMode = UITextFieldViewModeWhileEditing; 
     [self addSubview:self.searchField]; 

    } 
    return self; 
} 

我試圖讓searchBarSearchButtonClicked:委託方法的功能。

以下是一個(taskListViewController)代碼:

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { 
    searchBar = (UISearchBar *)searchView; 

    [self didTapSearchButton]; 
} 

- (IBAction)didTapSearchButton 

    { 
     NSString *searchTerm = searchView.searchField.text; 

     if ([searchTerm isEqualToString:@""]) { 
     [self.view endEditing:YES]; 
     return ; 
     } 

     [searchView resignFirstResponder]; 
     NSArray *results = [[CoreDataManager sharedInstance] fetchTaskByName:searchTerm]; 

     [tasks removeAllObjects]; 
     [tasks addObjectsFromArray:results]; 

     [self.view endEditing:YES]; 
     [taskTable reloadData]; 
    } 

所以我設置的.h

@interface TaskListViewController : UIViewController <UITableViewDelegate,UITableViewDataSource, UISearchBarDelegate, UITextFieldDelegate, ScavengerAPIGetTaskListDelegate>{ 
    SearchView *searchView; 
} 

.M上來就SearchView類和TaskListViewController兩個uisearchBarDelegate。它沒有被調用,因爲我是uiview而不是uisearchBar的子類?如果你需要更多的代碼/細節,請告訴我!謝謝!

回答

1

您已經創建了一個自定義搜索視圖,因此建議讓你的類實現委託自己的搜索方法,而不是使用現有的UISearchBar一個區分,使代碼更易讀的..

你應該做一個委託爲您SearchView

在這裏,您可以參考如何創建一個自己的 How to make Custom Delegate in iOS app

後創建TaskListViewController能夠符合該委託,並且可以調用內搜索查看方法當searchButton被點擊以便TaskListViewController收到它時

相關問題