Я создал следующий код, но есть еще одна вещь, которая меня беспокоит. По какой-то причине, когда я нажимаю любую клавишу на клавиатуре, она немедленно исчезает, моя строка отмены отключена, но код работает, и он правильно сортирует и отображает ячейки в моем табличном представлении, в которых есть те буквы, которые набрал пользователь, хотя только по одному. Я что-то упускаю? Спасибо.
Edit:
Вот код, который я использую. Может помочь понять это.
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
return [self headerView];
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return [[self headerView] frame].size.height;
}
- (UIView *)headerView
{
if (headerView)
return headerView;
float w = [[UIScreen mainScreen] bounds].size.width;
CGRect evHeaderFrame = CGRectMake(0.0, 0.0, w, 45.0);
theSearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 45)];
theSearchBar.showsCancelButton=YES;
theSearchBar.autocorrectionType=UITextAutocorrectionTypeNo;
theSearchBar.autocapitalizationType=UITextAutocapitalizationTypeNone;
theSearchBar.delegate = self;
headerView = [[UIView alloc] initWithFrame:evHeaderFrame];
[headerView addSubview:theSearchBar];
searching = NO;
return headerView;
[headerView release];
}
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
if(searching)
return;
searching = YES;
NSLog(@"Search Bar Text Did Begin Editing");
}
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar {
NSLog(@"Did End Editing");
}
- (void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText {
[copyListOfItems removeAllObjects];
if([searchText length] > 0) {
NSLog(@"Search Length is greater than 0");
searching = YES;
self.tableView.scrollEnabled = YES;
[self searchTableView];
}
else {
NSLog(@"Search Length is less than 1");
searching = NO;
self.tableView.scrollEnabled = YES;
}
[self.tableView reloadData];
}
- (void) searchBarSearchButtonClicked:(UISearchBar *)theSearchBar {
[self searchTableView];
}
- (void) searchTableView {
NSString *searchText = theSearchBar.text;
NSMutableArray *searchArray = [[NSMutableArray alloc] init];
for (int i = 0; i < [customArray count]; i++){
NSRange titleResultsRange = [[[customArray objectAtIndex:i] objectAtIndex:0] rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (titleResultsRange.length > 0)
//NSLog(@"%@ , %@",searchText,[customArray objectAtIndex:i]);
[copyListOfItems addObject:[customArray objectAtIndex:i]];
}
//NSLog(@"CopyListOfItems : %@",copyListOfItems);
[searchArray release];
searchArray = nil;
}
- (void) doneSearching_Clicked:(id)sender {
theSearchBar.text = @"";
NSLog(@"RESIGN FIRST RESPONDER");
[theSearchBar resignFirstResponder];
searching = NO;
self.navigationItem.rightBarButtonItem = nil;
self.tableView.scrollEnabled = YES;
[self.tableView reloadData];
}
Похоже, проблема была в [self.tableView reloadData] ;. Похоже, мне нужно будет найти новый способ размещения строки поиска на экране.