我有一个包含单元格图像和名称作为文本的tableview。在顶部,我添加了一个搜索栏。当我搜索我能够搜索名称,但图像仍然是相同的。如何根据搜索时名称的变化来更改图像? tableview委托中的这段代码,我也使用了一些搜索委托方法。我没有做任何事情来安排关于名字的图像。我需要帮助来实现它。
if(searching)
cell.textLabel.text = [copyListOfItems objectAtIndex:indexPath.row];
else {
[cell.imageView setImageWithURL:[NSURL URLWithString:[imageArray objectAtIndex:indexPath.row]]
placeholderImage:[UIImage imageNamed:@"defaultPerson.png"]];
cell.textLabel.text = [friendsList objectAtIndex:indexPath.row];
}
以下是更多代码:
- (void) searchTableView {
NSString *searchText = searchBar.text;
NSMutableArray *searchArray = [[NSMutableArray alloc] init];
for (NSString *sTemp in friendsList)
{
NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (titleResultsRange.length > 0)
[copyListOfItems addObject:sTemp];
}
[searchArray release];
searchArray = nil;
}
感谢。
答案 0 :(得分:1)
在我看来,你没有正确更新你的细胞。
简单的[myTableView reloadData];
可能会有所帮助,但您可能还需要考虑调查将imageView添加到单元格的方式。您可能没有正确删除(/已发布/已填充)放置在单元格顶部的imageView。每次更新单元格时都必须这样做,因为除非你明确告诉他们,否则imageViews不会自己这样做。
当您使用一些有用的代码更新您的问题时,我可以更加具体地了解您的问题。
现在您使用了一些(尽管数量很少)代码编辑了帖子,我可以从这个代码片段看到您没有将cell.imageViews更新为新的对象列表。
您使用新的“copyListOfItems”更新了您的uitableview,但您没有为您的图片执行相同操作,导致显示旧内容,即“imageArray”中的图像
您需要像对文本一样为图像制作类似的数组。
if(searching)
{
cell.textLabel.text = [copyListOfItems objectAtIndex:indexPath.row];
[cell.imageView setImageWithURL:[NSURL URLWithString:[searchedArrayOfImages objectAtIndex:indexPath.row]];
}
else {
[cell.imageView setImageWithURL:[NSURL URLWithString:[imageArray objectAtIndex:indexPath.row]]
placeholderImage:[UIImage imageNamed:@"defaultPerson.png"]];
cell.textLabel.text = [friendsList objectAtIndex:indexPath.row];
}
将图像保存到名称的更好方法(i.m.o.)正在为它们制作NSDictionary,因此当您选择记录时,您的名字始终适合您的图像。
关于以下评论:
在您搜索时,最常见的是在textDidChange
委托方法中,您最喜欢选择所有搜索匹配的索引。当你从“friendlist”中选择一个命中索引并将其放入“copyListOfItems”时,你还需要使用相同的索引并从“imageArray”获取图像并将它们放入“searchingArrayOfImages”。这样,您可以以相同的方式构建文本和图像阵列。然后,当您重新加载tableview时,您可以从“copyListOfItems”和“searchingArrayOfImages”获取相同的索引,并正确填充您的单元格。
它看起来像这样:
- (void) searchTableView
{
NSString *searchText = searchBar.text;
NSMutableArray *searchArray = [[NSMutableArray alloc] init];
int indexCount = 0; //keeps track of which index you are at.
for (NSString *sTemp in friendsList)
{
NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (titleResultsRange.length > 0)
{
[copyListOfItems addObject:sTemp]; //this is your name result
[searchedArrayOfImages addObject:[imageArray objectAtIndex:indexCount]]; //adds image that fits with the nameresult to array of searched images
}
indexCount++;
}
[searchArray release];
searchArray = nil;
}
完成搜索后,单元格将会更新(根据您的代码段)
if(searching)
{
cell.textLabel.text = [copyListOfItems objectAtIndex:indexPath.row];
[cell.imageView setImageWithURL:[NSURL URLWithString:[searchedArrayOfImages objectAtIndex:indexPath.row]];
}
else
{
[cell.imageView setImageWithURL:[NSURL URLWithString:[imageArray objectAtIndex:indexPath.row]]
placeholderImage:[UIImage imageNamed:@"defaultPerson.png"]];
cell.textLabel.text = [friendsList objectAtIndex:indexPath.row];
}
这应该足够了^^祝你好运。