UISearchBar无响应

问题描述:

我在UITableView中添加了UISearchBar并将其添加到UIView之内。我在窗口上添加了UIView,一切正常。 searchBarShouldBeginEditing正在触发并显示日志,但searchBarTextDidBeginEditing未触发。下面是我的代码:UISearchBar无响应

AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; 
self.frame = appDelegate.window.frame; 
[appDelegate.window addSubview:self]; 

myView.h

@property(strong, nonatomic) UISearchController *searchController; 

和内部myView.m

- (void)drawRect:(CGRect)rect { 
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 
    self.searchController.searchResultsUpdater = self; 
    self.searchController.dimsBackgroundDuringPresentation = NO; 
    self.searchController.searchBar.delegate = self; 
    [self.searchController.searchBar sizeToFit]; 
    self.searchController.searchBar.userInteractionEnabled = YES; 
    tblDropdown.tableHeaderView = self.searchController.searchBar; 

    arrSeached = [NSMutableArray array]; 
} 
+0

https://www.google.com/search?q=searchBarTextDidBeginEditing&oq=searchBarTextDidBeginEditing&aqs=chrome..69i57j0l2.446j0j8&sourceid=chrome&ie=UTF-8# q = searchBarTextDidBeginEditing + not + –

+0

drawRect不得用于仅为绘图添加视图。如果你想添加一个子视图,你可以在视图控制器的初始化器或viewDidLoad中完成 –

也许,问题是,你的视图控制器或视图(我知道没有所有代码)没有正确添加协议。

无论如何,这是使用一个UISearchController例如:

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, UISearchControllerDelegate, UISearchBarDelegate, UISearchResultsUpdating> 

@property (nonatomic, weak) IBOutlet UITableView * tableView; 
@property (nonatomic, strong) UISearchController * searchController; 
@property (nonatomic, strong) NSMutableArray * allItems; 
@property (nonatomic, strong) NSMutableArray * filteredItems; 
@property (nonatomic, weak) NSArray * displayedItems; 

@end 

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

@synthesize tableView; 
@synthesize searchController; 
@synthesize allItems; 
@synthesize displayedItems; 
@synthesize filteredItems; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // Create a list 

    self.allItems = [[NSMutableArray alloc] init]; 
    [self.allItems addObject:@"One"]; 
    [self.allItems addObject:@"Two"]; 
    [self.allItems addObject:@"Three"]; 


    // Create a list to hold search results (filtered list) 
    self.filteredItems = [[NSMutableArray alloc] init]; 

    // Initially display the full list. This variable will toggle between the full and the filtered lists. 
    self.displayedItems = self.allItems; 

    // Here's where we create our UISearchController 

    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 
    self.searchController.searchResultsUpdater = self; 
    self.searchController.searchBar.delegate = self; 

    [self.searchController.searchBar sizeToFit]; 

    // Add the UISearchBar to the top header of the table view 
    self.tableView.tableHeaderView = self.searchController.searchBar; 

    // Hides search bar initially. When the user pulls down on the list, the search bar is revealed. 
    [self.tableView setContentOffset:CGPointMake(0, self.searchController.searchBar.frame.size.height)]; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section { 
    return [self.displayedItems count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)anIndexPath { 

    UITableViewCell * cell = [aTableView dequeueReusableCellWithIdentifier:@"FruitCell"]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] init]; 
    } 
    cell.textLabel.text = [self.displayedItems objectAtIndex:anIndexPath.row]; 
    return cell; 
} 

// When the user types in the search bar, this method gets called. 
- (void)updateSearchResultsForSearchController:(UISearchController *)aSearchController { 
    NSLog(@"updateSearchResultsForSearchController"); 

    NSString *searchString = aSearchController.searchBar.text; 
    NSLog(@"searchString=%@", searchString); 

    // Check if the user cancelled or deleted the search term so we can display the full list instead. 
    if (![searchString isEqualToString:@""]) { 
     [self.filteredItems removeAllObjects]; 
     for (NSString *str in self.allItems) { 
      if ([searchString isEqualToString:@""] || [str localizedCaseInsensitiveContainsString:searchString] == YES) { 
       NSLog(@"str=%@", str); 
       [self.filteredItems addObject:str]; 
      } 
     } 
     self.displayedItems = self.filteredItems; 
    } 
    else { 
     self.displayedItems = self.allItems; 
    } 
    [self.tableView reloadData]; 
} 


    @end