Custom UITableViewCell Не обновляется при поиске - PullRequest
1 голос
/ 19 июля 2011

Я использую контроллер uitableview с uiSearchBar.В методе searchBarSearchButtonClicked я получаю данные и заполняю их в контроллере uitableview:

 - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {

    NSDictionary *data = [self getData];

    [self.tableData removeAllObjects];
    [self.tableData addObjectsFromArray:[data objectForKey:@"myKey"]];
    [self.view reloadData];
 }  

Проблема в том, что я использую пользовательскую ячейку uitableviewcell.Когда я нажимаю кнопку поиска, новые строки возвращаются, но строки, извлеченные во время предыдущего поиска, все еще остаются.

Например, если мой первоначальный поиск возвратил 1 строку результатов, и в этот раз я выполняю дополнительный поиск, возвращая 3строк, первая строка будет из первого поиска, а последующие две строки будут из второго поиска.

Я перезагружаю данные в представлении, поэтому я не уверен, почему ячейки сохраняются.Вот мой метод cellforrowatindexpath, в котором я создаю ячейки:

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

UITableViewCell *cell = [tableView
                         dequeueReusableCellWithIdentifier:MyIdentifier];

NSDictionary *data = [self.tableData objectAtIndex:indexPath.row];

if (cell == nil) {
    cell = [[[UITableViewCell alloc] 
             initWithStyle:UITableViewCellStyleSubtitle 
             reuseIdentifier:MyIdentifier] autorelease];



myLabelDetail = [[UILabel alloc] initWithFrame:CGRectMake(152.0, 32.0, 60.0, 5.0)];
myLabelDetail.tag = INSTRUMENT_ID_LABEL_TAG;
myLabelDetail.font = [UIFont systemFontOfSize:14.0];
myLabelDetail.textAlignment = UITextAlignmentLeft;
myLabelDetail.textColor = [UIColor grayColor];
myLabelDetail.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
myLabelDetail.text = [data objectForKey:@"title"];
[cell.contentView addSubview:myLabelDetail];
[myLabelDetail release];



cell.imageView.image = [UIImage imageNamed:@"icon"];
cell.textLabel.text = @"Title Text";
cell.detailTextLabel.text = @"My Label: ";


cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}else{
    myLabelDetail = (UILabel *)[cell.contentView viewWithTag:DETAIL_LABEL_TAG];
}

return cell;
}

Ответы [ 2 ]

0 голосов
/ 22 июля 2011

Я понял это:

 }else{
      myLabelDetail = (UILabel *)[cell.contentView viewWithTag:DETAIL_LABEL_TAG];
      // i needed to add this to update when cell is already initialized
      myLabelDetail = [data objectForKey:@"title"];
 }
0 голосов
/ 19 июля 2011

Я думаю, что проблема в использовании источника данных.Я полагаю, tableData - это массив, который вы используете для предоставления данных в табличное представление, поскольку он сбрасывается и загружается новыми объектами каждый раз, когда - (void) searchBarSearchButtonClicked: (UISearchBar *) searchBar методназывается.Но tableData нигде не используется внутри cellForRowAtIndexPath метода.Предоставление данных для tableView из массива tableData может решить вашу проблему.

...