выберите несколько строк из uitableview и удалите - PullRequest
1 голос
/ 10 февраля 2011

Я отображаю список элементов в таблице. Мне нужно выбрать и удалить несколько строк из таблицы за раз, любые ресурсы о том, как это сделать

Ответы [ 2 ]

3 голосов
/ 10 февраля 2011

Я предполагаю, что у вашей таблицы есть только один раздел.Вы можете довольно легко расширить это решение на несколько разделов.

  • Добавьте член NSMutableSet "selectedRows" в свой подкласс UIViewController, который управляет вашим TableView
  • в - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath, чтобы переключать indexPath.row'sчленство в «selectedRows», например:

NSNumber *rowNsNum = [NSNumber numberWithUnsignedInt:indexPath.row];
if ( [self.selectedRows containsObject:rowNsNum] )
    [self.selectedRows removeObject:rowNsNum];
else 
    [self.selectedRows addObject:rowNsNum];
  • визуально указывает, что выбрана строка (например, установите для свойства accessoryType ячейки значение UITableViewCellAccessoryCheckmark) илиизмените вашу ячейку визуально другим способом, чтобы указать, что это выбранная строка
  • добавьте кнопку «удалить» в ваш пользовательский интерфейс, либо в верхнем / нижнем колонтитуле раздела таблицы, в строке заголовка, где угодно, подключив кселектор с именем "deleteRows"
  • в вашем методе deleteRows, итерация по набору selectedRows, создание массива indexPaths, удаление этих строк из вашей модели данных, а затем вызов (с вашим предпочтительным типом анимации):

[self.myTableView deleteRowsAtIndexPaths:arrayOfIndexPathsToDelete withRowAnimation:UITableViewRowAnimationTop];    

РЕДАКТИРОВАТЬ: Вот мой полный метод didSelectRowAtIndexPath.Для правильной работы может потребоваться deselectRowAtIndexPath.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    if ( self.editing )
        return;

    [self.myTableView deselectRowAtIndexPath:indexPath animated:YES];

    NSNumber *rowNsNum = [NSNumber numberWithUnsignedInt:indexPath.row];
    if ( [self.selectedRows containsObject:rowNsNum] )
        [self.selectedRows removeObject:rowNsNum];
    else 
        [self.selectedRows addObject:rowNsNum];

    [self.myTableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.2];
}
0 голосов
/ 02 февраля 2016
#import "ViewController.h"
#import "TableViewCell.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITableView *tblView;
@property (strong,nonatomic)NSMutableArray *arryData1,*arryData2;
@property (strong,nonatomic)UIBarButtonItem *edit,*delete;
@end

@implementation ViewController
{
    BOOL Selected;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    self.arryData1 = [[NSMutableArray alloc] initWithObjects:@"MCA",@"MBA",@"BTech",@"MTech",nil];
        self.arryData2 = [[NSMutableArray alloc] initWithObjects:@"Objective C",@"C++",@"C#",@".net",nil];

    self.edit=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(edit:)];
    self.navigationItem.leftBarButtonItem=self.edit;
    self.delete=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:self action:@selector(delete:)];
    self.navigationItem.rightBarButtonItem=self.delete;
    self.tblView.allowsMultipleSelection=YES;

    }

-(void)edit:(id)sender
{
    Selected=YES;
    [self.tblView reloadData];
}
-(void)delete:(id)sender
{
    NSArray *selectedCells = [self.tblView indexPathsForSelectedRows];
    NSMutableIndexSet *indicesToDelete = [[NSMutableIndexSet alloc] init];
    for (NSIndexPath *indexPath in selectedCells) {
        [indicesToDelete addIndex:indexPath.row];
    }
    //arrayFromPlist is NSMutableArray
    [self.arryData1 removeObjectsAtIndexes:indicesToDelete];
    [self.tblView beginUpdates];
    [self.tblView deleteRowsAtIndexPaths:selectedCells withRowAnimation:UITableViewRowAnimationAutomatic];
    [self.tblView endUpdates];

}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Remove the row from data model
    [self.arryData1 removeObjectAtIndex:indexPath.row];
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return 1;
    }

    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return [self.arryData1 count];
    }



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

        TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil)
        {
            cell = [[TableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] ;
        }
        if (Selected==YES) {
            cell.imageView.image=[UIImage imageNamed:@"trash.png"];
        }
        else
        {
            cell.imageView.image=nil;
        }
        cell.textLabel.text = [self.arryData1 objectAtIndex:indexPath.row];
        cell.detailTextLabel.text = [self.arryData2 objectAtIndex:indexPath.row];

        return cell;
    }

@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...