[英]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.