2013-12-12 4 views
-2

Я реализовал функцию поиска, как показано ниже. Я могу получить строки на основе строки поиска, но они пусты, когда я нажимаю на пустую ячейку результатов поиска, могу правильно перемещаться по каждому результату поиска. Я использую ячейки, сконфигурированные на основе истории, для отображения таблицы. Я имею в виду использование тегов для заполнения данных и изображений.UISearchcontroller работает неправильно

- (void)viewDidLoad 
{ 

    sqlDatabase = [SQLiteDatabase getDatabaseInstance];   
    filteredItemist=[[NSMutableArray alloc] initWithArray:[sqlDatabase fetchCropListBySoilName:soilName]]; 
    [super viewDidLoad]; 
} 




- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] ; 
     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
    } 
    // Configure the cell... 

    Crop * crop = [filteredItemist objectAtIndex:[indexPath row]]; 


    NSString* str = [NSString stringWithFormat:@"%@.jpg",crop.cropName.lowercaseString]; 

    UIImageView *cropImageView = (UIImageView *)[cell viewWithTag:100]; 
    cropImageView.image = [UIImage imageNamed:str]; 

    UILabel *cropNameLabel = (UILabel *)[cell viewWithTag:70]; 
    cropNameLabel.text = [crop cropName]; 

    return cell; 

} 


- (void)viewWillAppear:(BOOL)animated 
{ 
    self.navigationItem.title = @"Item List"; 
    filteredItemist = [[NSMutableArray alloc]initWithArray:[sqlDatabase fetchCropListBySoilName:soilName]]; 
    [self.tableView reloadData]; 
    self.navigationController.toolbarHidden = YES; 
    [super viewWillAppear:animated]; 
} 


- (void)filterContentForSearchText:(NSString*)searchText 
{ 
    if([searchText length] == 0) 
    { 
     isFiltered = FALSE; 
     [filteredItemist removeAllObjects]; 
     [filteredItemist addObjectsFromArray:[sqlDatabase fetchCropListBySoilName:soilName]]; 

    } 
    else{ 
     isFiltered = TRUE; 
     [filteredItemist removeAllObjects]; 
     for(Crop *i in [sqlDatabase fetchCropListBySoilName:soilName]){ 
      NSRange stringRange = [[i cropName]rangeOfString:searchText options:NSCaseInsensitiveSearch]; 
      if(stringRange.location !=NSNotFound){ 
       [filteredItemist addObject:i]; 
      } 
     } 

    } 
    [self.tableView reloadData]; 

} 

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString 
{ 
    [self filterContentForSearchText:searchString]; 

    return YES; 
} 

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

enter image description here

Edit:

после изменения кода self.tableview:

enter image description here

+0

Запишите свой объект 'Crop'. –

+0

- это атрибуты в NSInteger cropId; NSString * cropName; NSInteger farmId; NSInteger Soil_id; и в результатах поиска объект имеет данные, но каким-то образом не может заполнить таблицы из панели рассказов при перезагрузке таблицы. – user2569524

ответ

0

Вместо этого:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

использовать это:

UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

Результаты поиска отображаются в отдельном виде таблицы. Поэтому, если вы используете tableView без себя, вы можете ссылаться на таблицу результатов поиска.

+0

Большое спасибо. Я получаю данные сейчас. Но размер ячейки - это не то, что я получаю в своем первоначальном представлении, или то, что я определил на доске истории, гораздо меньший размер и, следовательно, ее разделение на одну ячейку на две ячейки в результирующей таблице. Я добавил изображение как Edit в моем после . Пожалуйста, проверьте . Спасибо – user2569524

+0

Измените свой метод heightForRowAtIndexPath, чтобы отразить изменение высоты. –

Смежные вопросы