显示错误/混合单元格结果的搜索栏
Posted
技术标签:
【中文标题】显示错误/混合单元格结果的搜索栏【英文标题】:Search Bar showing wrong/mixed cell results 【发布时间】:2016-10-17 05:08:43 【问题描述】:我的 ios 项目有问题。我正在使用搜索栏在我的自定义表格视图中过滤我的数组,以显示搜索的匹配关键字。
它没有显示代码错误,但显然有问题。
我的 tableview 中通常有 20 多个项目,但是当我搜索时,它只显示我的 tableview 通常没有搜索的第一个单元格,确切地说,该单元格的图像相同,但它不是同一个单元格,因为每个单元格有一个按钮,通过该单元格中的标签显示特定信息。因此,当我搜索并出现结果时,它会显示 tableview 中的第一个单元格具有但带有正确单元格或匹配单元格的标签或信息的图像。
我不知道它可能是什么。也许它保留了第一个单元格的图像,因为它是一个自定义的 tableview 单元格,并且由于某种原因它没有过滤出正确的图像。但奇怪的部分是显示的是正确的单元格,因为每个单元格所具有的特定标签正在显示,而不是第一个单元格与第一个单元格图片的标签。我希望我说得通。
代码:
numberOfRowsInSection
if (isFiltered)
return [filteredGamesArray count];
return [gamesArray count];
cellForRowAtIndexPath
Game * gameObject;
if (!isFiltered)
gameObject = [gamesArray objectAtIndex:indexPath.row];
else
gameObject = [filteredGamesArray objectAtIndex:indexPath.row];
return cell;
searchBar textDidChange
if (searchText.length == 0)
isFiltered = NO;
else
isFiltered = YES;
filteredGamesArray = [[NSMutableArray alloc] init];
for (Game *game in gamesArray)
NSString *str = game.gameName;
NSRange stringRange = [str rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (stringRange.location != NSNotFound)
[filteredGamesArray addObject:game];
[myTableView reloadData];
另外,我不会在我的应用中保留任何图像或文本。我使用 json/php/mysql 从服务器获取填充 tableview 单元格的所有信息,以及我使用 URL 的图像。
我在这里遗漏了一些东西。如果您需要更多详细信息,请告诉我。
cellForRowAtIndexPath
// Loading Images
NSURL * imgURL = [[gamesArray objectAtIndex:indexPath.row] valueForKey:@"gameURL"];
[cell.myImageView setContentMode:UIViewContentModeScaleAspectFit];
[cell.myImageView sd_setImageWithURL:imgURL placeholderImage:[UIImage imageNamed:@"no-image.jpg"] options:SDWebImageRefreshCached];
【问题讨论】:
我会建议你使用“谓词”进行过滤 你的结果是在 searchBar textDidChange 中的 filteredGamesArray 数组中得到的吗 是的,我在filteredGamesArray中的结果 【参考方案1】:使用 NSPredicate 搜索最佳选项。
searchArray=[[NSArray alloc]init];
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF.YOURSEARCHKEY contains[c] %@", YOURTEXTFIELD.text];
NSLog(@"%@",resultPredicate);
searchArray = [ORIGNALARRAY filteredArrayUsingPredicate:resultPredicate];
NSLog(@"%@",searchArray);
[self.colorTableview reloadData];
// 这里检查搜索是打开还是关闭,然后像这样更新你的数组
if searching
NSURL * imgURL = [[searchArray objectAtIndex:indexPath.row] valueForKey:@"gameURL"];
[cell.myImageView setContentMode:UIViewContentModeScaleAspectFit];
[cell.myImageView sd_setImageWithURL:imgURL placeholderImage:[UIImage imageNamed:@"no-image.jpg"] options:SDWebImageRefreshCached];
else
NSURL * imgURL = [[gamesArray objectAtIndex:indexPath.row] valueForKey:@"gameURL"];
[cell.myImageView setContentMode:UIViewContentModeScaleAspectFit];
[cell.myImageView sd_setImageWithURL:imgURL placeholderImage:[UIImage imageNamed:@"no-image.jpg"] options:SDWebImageRefreshCached];
【讨论】:
由于我是新手,我会放什么而不是“YOURTEXTFIELD.text”,它只允许我放一个数组 Yourtextfield 只是输入您的搜索字段,而 YOURSEARCHKEY 表示将您想要搜索的密钥从您那里输入。 ORIGNALARRAY 数组是您要执行搜索的主要数组 与旧代码发生的情况相同,它显示的是正确的单元格,但第一个单元格的图像不是与确切单元格对应的图像。 @BroSimple 向我展示您的图像阵列。并在您使用它的代码中 我将图像代码添加到 cellForRowAtIndexPath,我将其发布在问题的底部。以上是关于显示错误/混合单元格结果的搜索栏的主要内容,如果未能解决你的问题,请参考以下文章
在 UITableView 单元格 iOS Swift 中突出显示搜索结果