簡體   English   中英

搜索問題-iPhone SDK

[英]Searching issue-iphone sdk

我有一個包含單元格圖像和名稱作為文本的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;
}

謝謝。

在我看來,您沒有正確更新單元格。

一個簡單的[myTableView reloadData]; 可能會有所幫助,但您可能還需要考慮研究將imageViews添加到單元格的方式。 您可能沒有正確刪除(/釋放/刪除)放置在單元格頂部的imageViews。 每次更新單元格時也必須執行此操作,因為除非您明確告知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];        
}

將圖像保存為名稱的一種更好的方法(imo)是為它們創建一個NSDictionary,因此當您選擇一條記錄時,您的名稱始終適合您的圖像。


關於以下注釋:在搜索時,最有可能在textDidChange委托方法中,選擇所有搜索匹配項的索引行。 現在,您從“ friendlist”中選擇匹配的索引並將其放入“ copyListOfItems”中,您還需要使用相同的索引並從“ imageArray”中獲取圖像並將其放入“ searchedArrayOfImages”中。 這樣,您可以以相同的方式構建文本數組和圖像數組。 然后,當您重新加載表格視圖時,可以從“ copyListOfItems”和“ searchedArrayOfImages”中獲取相同的索引,並正確填充單元格。


它看起來像這樣:

- (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];        
}

這應該足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM