2013-04-26 54 views
0

我试图按字母顺序实现标题并在其上实现搜索。但不显示所有数据,仅显示一个字母表的标题并仅显示其值。并且在搜索中除了一个字母之外也不显示数值。以下是我使用的代码。在普通UITableview中使用字母标题实现搜索

-(void)getData 
{ 
NSLog(@"get data:%@", self.mGetDataDict); 

NSLog(@"count:%d", [self.mGetDataDict count]); 

NSString *getStatus = [self.mGetDataDict valueForKey:@"status"]; 
NSArray *dictAllKeys = [[NSArray alloc]init]; 
NSMutableArray *getAllDict = [[NSMutableArray alloc] init]; 

NSLog(@"getfinalStatus----------%@",getStatus); 

if([getStatus isEqual:[NSNumber numberWithBool:0]]) 
{ 
    NSLog(@"status:%@", getStatus); 
} 
else 
{ 
    dictAllKeys = [self.mGetDataDict allKeys]; 
    for(int i=1; i<=[dictAllKeys count]; i++) 
    { 
     getAllDict = [self.mGetDataDict valueForKey:[NSString stringWithFormat:@"%d",i]]; 
     [self.mArrName addObject:[getAllDict valueForKey:@"name"]]; 
     [self.mArrPImg addObject:[getAllDict valueForKey:@"profileImage"]]; 
     if([seatMapStatus isEqualToString:@"yes"]) 
     { 
     [self.mArrIng addObject:[getAllDict valueForKey:@"ing"]]; 
     } 

     stateIndex = [[NSMutableArray alloc] init]; 

     for (int i=0; i<[self.mArrName count]-1; i++){ 
      //---get the first char of each state--- 
      char alphabet = [[self.mArrName objectAtIndex:i] characterAtIndex:0]; 
      NSString *uniChar = [NSString stringWithFormat:@"%c", alphabet]; 

      //---add each letter to the index array--- 
      if (![stateIndex containsObject:uniChar]) 
      { 
       [stateIndex addObject:uniChar]; 
      } 
     } 
    } 
} 
NSLog(@"index:%@", stateIndex); 
NSLog(@"name:%@", self.mArrName); 

} 


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath  *)indexPath 
{ 
return 60; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 

return [stateIndex count]; 
} 

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
NSLog(@"copy arr:%d", [copyArr count]); 
if(searching) 
{ 
    NSString *alphabet = [stateIndex objectAtIndex:section]; 

//---get all states beginning with the letter--- 
NSPredicate *predicate = 
[NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", alphabet]; 
NSArray *states = [copyArr filteredArrayUsingPredicate:predicate]; 

//---return the number of states beginning with the letter--- 
return [states count]; 
    // return [copyArr count]; 
} 
else{ 
    NSString *alphabet = [stateIndex objectAtIndex:section]; 

//---get all states beginning with the letter--- 
NSPredicate *predicate = 
[NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", alphabet]; 
NSArray *states = [self.mArrName filteredArrayUsingPredicate:predicate]; 

//---return the number of states beginning with the letter--- 
return [states count]; 

} 
} 

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section  { 

return [stateIndex objectAtIndex:section]; 
} 

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString*)title atIndex:(NSInteger)index 
{ 
return index; 
} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"Cell"; 
UITableViewCell *cell; 
cell = [self.mEventMemTableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 
else{ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 
cell.selectionStyle = UITableViewCellSelectionStyleNone; 

NSString *imageUrlString = [self.mArrPImg objectAtIndex:indexPath.row]; 

asyncImageView = [[AsyncImageView alloc]initWithFrame:CGRectMake(10, 5, 50, 45)]; 
[asyncImageView loadImageFromURL:[NSURL URLWithString:imageUrlString]]; 
[cell.contentView addSubview:asyncImageView]; 

UILabel *lblName = [[UILabel alloc]initWithFrame:CGRectMake(80, 15, 150, 30)]; 
if([copyArr count] >0) 
{ 
    //---get the letter in the current section--- 
    NSString *alphabet = [stateIndex objectAtIndex:indexPath.section]; 

    //---get all states beginning with the letter--- 
    NSPredicate *predicate = 
    [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", alphabet]; 
    NSArray *states = [copyArr filteredArrayUsingPredicate:predicate]; 

    if ([states count]>0) { 
     //---extract the relevant state from the states object--- 
     //NSString *cellValue = [states objectAtIndex:indexPath.row]; 
     // cell.textLabel.text = cellValue; 

    lblName.text = [states objectAtIndex:indexPath.row]; 
} 
} 
else{ 
    //---get the letter in the current section--- 
    NSString *alphabet = [stateIndex objectAtIndex:indexPath.section]; 

    //---get all states beginning with the letter--- 
    NSPredicate *predicate = 
    [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", alphabet]; 

    NSArray *states = [self.mArrName filteredArrayUsingPredicate:predicate]; 

    if ([states count]>0) { 
     //---extract the relevant state from the states object--- 
     //NSString *cellValue = [states objectAtIndex:indexPath.row]; 
     // cell.textLabel.text = cellValue; 
    lblName.text = [states objectAtIndex:indexPath.row]; 
} 
} 
[cell addSubview:lblName]; 

return cell; 
} 

- (void) searchBarTextDidBeginEditing:(UISearchBar *)theSearchBar { 

searching = YES; 
} 

- (void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText { 

//Remove all objects first. 
[copyArr removeAllObjects]; 

if([searchText length]) { 

    searching = YES; 
    //letUserSelectRow = YES; 
    //self.tableView.scrollEnabled = YES; 
    [self searchTableView]; 
} 
else { 
    searching = NO; 
} 
[self.mEventMemTableView reloadData]; 
} 

- (void) searchBarSearchButtonClicked:(UISearchBar *)theSearchBar { 
[self.mSearchBar resignFirstResponder]; 
[self searchTableView]; 
} 

- (void) searchTableView { 

NSString *searchText = self.mSearchBar.text; 
NSMutableArray *searchArray = [[NSMutableArray alloc] init]; 

for (NSString *sTemp in self.mArrName) 
{ 
    NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch]; 

    if (titleResultsRange.length) 
     [copyArr addObject:sTemp]; 
} 
searchArray = nil; 

} 

请为上述指导。提前致谢。

回答