2011-02-10 5 views

ответ

3

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

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

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

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

EDIT: Вот мой полный метод 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

У меня есть проблема, делая это, я установил сотовое изображение для отображения в то время как я выбрал клетку, чтобы удалить, но эта точка зрения обновляется только после того, как я прокручивать ячейку из поля зрения, а затем сделать он возвращается, как я могу обновить cellimage в свое время? – sujith1406

+0

Вы можете принудительно перезагрузить представление таблицы с помощью [tableView reloadData] ;. У меня возникли проблемы с обновлением отдельных ячеек в didSelectRowAtIndexPath (визуальные глюки), снова решена только путем вызова reloadData. И иногда, трюк, который я использую, заключается в том, чтобы сделать задержку вызова reloadData с помощью функции performSelector: withObject: afterDelay, иногда это единственный способ снова получить таблицу «здравомыслящий». – Bogatyr

+0

thankyou, еще одна проблема, с которой я столкнулся, заключается в том, что в вышеприведенном случае, если условие else только часть else работает все время, помощь pls, i nslogged и проверены, есть значения в наборе, но первое условие не работает – sujith1406

0
#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 
+0

на кнопке «щелчок» на кнопке «Редактировать» - это изменение и просто выберите несколько строк, затем нажмите кнопку «Удалить», и вы увидите, что все выделенные строки ячеек удалены. –

+0

код удаления нескольких строк. –

+0

Добавить объяснение, как это решить проблему в вашем ответе – NSNoob

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