2016-10-17 3 views
1

У меня проблема в моем проекте iOS. Я использую панель поиска для фильтрации моего массива в своем пользовательском представлении таблицы, чтобы отображать соответствующие ключевые слова для поиска.Панель поиска, показывающая неправильные/смешанные результаты ячейки

Он не показывает ошибок кода, но, очевидно, есть проблема.

Обычно в моем представлении таблицы более 20 элементов, но когда я выполняю поиск, в нем отображается только первая ячейка, которую обычно имеет мой рабочий стол, без поиска, то же изображение для этой ячейки, если быть точным, но это не та же ячейка, каждая ячейка имеет кнопку, показывающую конкретную информацию через метку в этой ячейке. Поэтому, когда я выполняю поиск и результат получается, он показывает изображение, которое имеет первая ячейка в таблице, но с меткой или информацией о правильной ячейке или соответствующей ячейке.

Я не знаю, что это может быть. Возможно, это сохраняет изображение первой ячейки, потому что это пользовательская ячейка 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]; 

Кроме того, я не сохраняю никаких изображений или текста в своем приложении. Я получаю всю информацию, которая заполняет ячейку tableview с сервера, используя json/php/mysql, с изображениями, в которых я использую 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]; 
+1

Я предлагаю вам использовать «предикат» для фильтрации – Wolverine

+0

ли вы получить результат в filteredGamesArray массиве, a searchBar textDidChange –

+0

yes мои результаты в отфильтрованномGamesArray – BroSimple

ответ

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]; 
} 
+0

Поскольку я довольно новичок, что бы я поставил вместо «YOURTEXTFIELD.text», это только позволило мне поставить массив – BroSimple

+0

. Yourtextfield просто положил ваше поле поиска, а YOURSEARCHKEY означает, что ваш ключ от вас вас, что вы хотите искать. и массив ORIGNALARRAY - ваш основной массив, который вы хотите выполнить. –

+0

@BroSimple ясно с моим ответом? –

Смежные вопросы