搜索栏显示错误/混合细胞结果

时间:2016-10-17 05:08:43

标签: ios objective-c uitableview uisearchbar

我的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单元格的所有信息,我使用的是图像。

我在这里遗漏了一些东西。如果您需要更多详细信息,请告诉我们。

的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];

1 个答案:

答案 0 :(得分: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];
}