2013-06-03 6 views
0

У меня есть обычный UITableView с пользовательской ячейкой с UISearchBar и я могу использовать searchBar: textDidChange метод фильтрации строк. Но то, что я хочу добавить в мой проект, - это возможность удалять отфильтрованные строки, которые эти строки будут удалены из оригинала DataSourseArray
Как это реализовать?Как удалить строки из UITableView с помощью UISearchBar?

+0

Что вы используете в качестве источника данных? Например, с помощью coreData вы можете использовать NSFetchedResultsController для автоматической обработки;) – geo

+0

Я использую обычный NSMutableArray и другой mutalbeArray для filterDataSourse – Egor

ответ

0

Если у вас есть панель поиска, вам придется фильтровать данные, если фильтр пуст или нет. Иты удобно держать отфильтрованные данные и полную коллекцию separetly:

@property (strong, nonatomic) NSMutableArray* allTableData; 
@property (strong, nonatomic) NSMutableArray* filteredTableData; 

В зависимости, если фильтр оп ределяется вам нужно будет возвращать diffrend подсчет клеток

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section 
{ 
    int rowCount; 
    if(self.isFiltered) 
     rowCount = filteredTableData.count; 
    else 
     rowCount = allTableData.count; 

    return rowCount; 
} 

И то же самое с возвратом ячейки. Если есть фильтр - вы должны использовать индекс Светланы отфильтрованных данных

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 

    Food* food; 
    if(isFiltered) 
     food = [filteredTableData objectAtIndex:indexPath.row]; 
    else 
     food = [allTableData objectAtIndex:indexPath.row]; 

    // ... Set up the cell here...; 

    return cell; 
} 

Here is tutorial на фильтрацию UITableView

+0

Я использую обычный NSMutalbeArray и другой mutableArray для filterDataSourse – Egor

+0

См. Прилагаемый учебник. Надеюсь, это поможет. – BlueConga

0

, что вы можете сделать, это [aryAll removeObjectsInArray:aryFilter];, чтобы удалить все и рассказать tableView к reloadData.

Или удалить сингл добавить

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(editingStyle == UITableViewCellEditingStyleDelete) 
    { 
     NSObject *obj = [aryFilter objectAtIndex:indexPath.row]; 
     [aryFilter removeObject:obj]; 
     [aryAll removeObject:obj]; 

     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
} 

, например;)

Не пробовал в моем коде, но что-то вроде этого вам нужно будет :)

+0

Огромное спасибо :) – Egor

+0

надеюсь, что это работает, как будто это должно быть :) если да, пожалуйста, установите ответ как принято. если нет, сообщите, где у вас все еще есть проблемы, и я увижу, как вам можно помочь;) – geo

+0

да-это работает, как я ожидал:), но как я могу задать ответ как принятый? – Egor

0

С чего вы сказал, что вы используете 2 разных массива. Один для полных данных и один для фильтрованных данных. Используйте один массив, и это может быть легко достигнуто.

Другими словами. Когда вы фильтруете, добавьте obj ects в отфильтрованный массив, а затем удалить все объекты из массива данных и добавить из фильтрованного массива и отобразить его с помощью reloaddata.

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