我正在使用带有uiSearchBar的uitableviewcontroller。在searchBarSearchButtonClicked方法中,我获取数据并在uitableviewcontroller中填充它:
- (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;
}
答案 0 :(得分:0)
我认为问题在于使用数据源。我猜 tableData 是用于向tableview提供数据的数组,因为每次 - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar 方法被调用。但 tableFor 不会在 cellForRowAtIndexPath 方法中的任何位置使用。从 tableData 数组向tableView提供数据可能会解决您的问题。
答案 1 :(得分:0)
我明白了:
}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"];
}