1

我有一张有 4 个标签的桌子,效果很好。当我使用也可以正常工作的搜索栏时,表格只显示两个标签:

- (void)viewDidLoad
  {
  [super viewDidLoad];
  NSString *filePath = [[NSBundle mainBundle] pathForResource:@"airports" ofType:@"json"];

 NSString *JSONData = [[NSString alloc] initWithContentsOfFile:filePath  encoding:NSUTF8StringEncoding error:NULL];
NSArray *airports = [NSJSONSerialization JSONObjectWithData:[JSONData dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];




finalArray = [[NSArray alloc]init];
finalArray = airports;
}



-(void)filterContentForSearchText:(NSString *)searchText{
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF.airport_name  contains[cd] %@", searchText];
 self.searchResults = [finalArray filteredArrayUsingPredicate:resultPredicate];


 }

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller  shouldReloadTableForSearchString:(NSString *)searchString{

[self filterContentForSearchText:searchString];
return YES;
 }
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 {
// Return the number of sections.
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (tableView == self.tableView) {

   return [finalArray count];
 }else{

    return [searchResults count];
 }
  }

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:   (NSIndexPath *)indexPath
   {static NSString *simpleTableIdentifier = @"AirportCell";

  AirportCell *cell = (AirportCell *)[tableView   dequeueReusableCellWithIdentifier:simpleTableIdentifier];
 if (cell == nil)
 {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"AirportCell" owner:self  options:nil];
    cell = [nib objectAtIndex:0];
  }

NSString *airportName = [[NSString alloc]init];
NSString *iataCode = [[NSString alloc]init];
NSString *icaoCode = [[NSString alloc]init];
NSString *countryAirport = [[NSString alloc]init];


if (tableView == self.tableView) {

    airportName = [[finalArray objectAtIndex:indexPath.row] objectForKey:@"airport_name"];
    iataCode = [[finalArray objectAtIndex:indexPath.row] objectForKey:@"iata_code"];
    icaoCode = [[finalArray objectAtIndex:indexPath.row] objectForKey:@"icao_code"];
    countryAirport = [[finalArray objectAtIndex:indexPath.row] objectForKey:@"country"];



    cell.iataCodeLabel.text = iataCode;
    cell.iataCodeLabel.font = [UIFont fontWithName:@"Verdana" size:13];
    cell.icaoCodeLabel.text = icaoCode;
    cell.icaoCodeLabel.font = [UIFont fontWithName:@"Verdana" size:13];

    cell.airportNameLabel.text = airportName;
    cell.airportNameLabel.font = [UIFont fontWithName:@"Verdana" size:13];

    cell.countryLabel.text = countryAirport;
    cell.countryLabel.font = [UIFont fontWithName:@"Verdana" size:13];

}else{



    airportName = [[searchResults objectAtIndex:indexPath.row] objectForKey:@"airport_name"];
    iataCode = [[searchResults objectAtIndex:indexPath.row] objectForKey:@"iata_code"];
    icaoCode = [[searchResults objectAtIndex:indexPath.row] objectForKey:@"icao_code"];
    countryAirport = [[searchResults objectAtIndex:indexPath.row] objectForKey:@"country"];


    cell.iataCodeLabel.text = iataCode;
    cell.iataCodeLabel.font = [UIFont fontWithName:@"Verdana" size:13];
    cell.icaoCodeLabel.text = icaoCode;
    cell.icaoCodeLabel.font = [UIFont fontWithName:@"Verdana" size:13];

    cell.airportNameLabel.text = airportName;
    cell.airportNameLabel.font = [UIFont fontWithName:@"Verdana" size:13];

    cell.countryLabel.text = countryAirport;
    cell.countryLabel.font = [UIFont fontWithName:@"Verdana" size:13];
}


return cell;
  }

在此处输入图像描述 在此处输入图像描述

4

2 回答 2

1

我相信您的 searchDisplayController 正在改变您的单元格的高度。这个问题的答案可能对你有帮助。

于 2013-09-27T13:40:05.457 回答
0

您可能会发现“AirportCell”仅为主 tableview 注册 - 而不是为搜索 tableview 注册。

[self.searchDisplayController.searchResultsTableView registerClass:[AirportCell class] forCellReuseIdentifier: simpleTableIdentifier];
于 2013-09-27T13:24:40.523 回答