正在搜索问题 - iphone sdk

时间:2011-10-20 10:54:21

标签: iphone uitableview searchbar

我有一个包含单元格图像和名称作为文本的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;
}

感谢。

1 个答案:

答案 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];        
}

这应该足够了^^祝你好运。