Как получить выбранную ячейку CollectionViewCell в UICollectionView?

#ios #objective-c #uicollectionview #uicollectionviewcell

#iOS #objective-c #uicollectionview #uicollectionviewcell

Вопрос:

Я новичок в разработке IOS, и я пытаюсь использовать UIcollectionView , чтобы показать фотографию без использования storyboard .

Я создаю xib file вызов AITFileCell_grid.xib и добавляю Collection View Cell .

Я также создаю другую xib file и добавляю Collection View для загрузки Collection View Cell .

Я хочу выбрать несколько файлов и удалить их delete button .

Но я не могу получить ячейку при нажатии delete button на следующий код.

 if(self.collectionView.indexPathsForSelectedItems > 0){
        NSLog(@"indexPathsForSelectedItems...count.%@..@@@" , self.collectionView.indexPathsForSelectedItems);


        for(NSIndexPath *indexPath in self.collectionView.indexPathsForSelectedItems){

//            [self.collectionView deselectItemAtIndexPath:indexPath animated:NO];
            NSString *filePath = [NSString stringWithFormat:@"%@/%@", directory, [fileList objectAtIndex:indexPath.row]];
            [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil] ;
            AITFileCell_grid *cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"AITFileCell_grid" forIndexPath:indexPath];
        }
    }
 

Но продажа кажется неправильной…

Как получить selected cell вход collectionView ?

Комментарии:

1. Сначала укажите тег like delete.tag =indexpath.item , а затем поддерживайте массив при выборе. после этого, когда вы захотите удалить, чем использовать цикл for, вы можете удалить данные из массива и просто [collectionview reloaddata] .

Ответ №1:

Обычно ваша кнопка удаления должна иметь такой селектор:

 deleteButton = [[UIButton alloc] init];
...
[deleteButton addTarget:self selector:@sel(buttonPressed:) forControlEvent:UIControlEventTouchUpInside];
 

Я полагаю, вы можете получить indexPath, используя следующее:

 -(void)buttonPressed:(id)sender
{
    UIButton *button = (UIButton *)sender;

    CGPoint rootPoint = [button convertPoint:CGPointZero toView:self.collectionView];

    NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:rootPoint];

    // -----------------------------------------------------------------
    // Now you have your indexPath, you can delete your item
    // -----------------------------------------------------------------



    // first update your data source, in this case, I assume your data source 
    // is a list of values stored inside a NSArray

    NSMutableArray *updatedList = [self.myListData mutableCopy];

    [updatedList removeObjectAtIndex:indexPath.row];

    self.myListData = updatedList;


    // now update your interface

    [self.collectionView performBatchUpdates:^{
        [self.collectionView deleteItemsAtIndexPath:@[indexPath]];
    }];
}
 

Ответ №2:

Для проверки того, какая ячейка коллекции нажата, вы можете использовать этот метод делегирования в вашем контроллере.

 -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    int itemNo = (int)[indexPath row] 1;
    CollectionCell *selectedCell =(CollectionCell*)[collectionView cellForItemAtIndexPath:indexPath];
    switch (itemNo) {
        case 1:
        {
            //your Logic for 1st Cell
            break;
        }
        case 2:
        {
            //your Logic for 2nd Cell
            break;
        }
        .
        .
        .
    }
}