#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;
}
.
.
.
}
}