从 UICollectionView 中删除一个项目
Posted
技术标签:
【中文标题】从 UICollectionView 中删除一个项目【英文标题】:Remove an item from a UICollectionView 【发布时间】:2013-04-18 10:20:39 【问题描述】:我在UICollectionView
中显示了一组图像。当用户点击图像时,它会生成一个UIActionSheet
,其中包含该图像的一些选项。其中一个从UICollectionView
中删除了照片。当用户在UIActionSheet
中选择删除按钮时,它会弹出一个警报视图,要求确认。如果用户选择是,它应该删除照片。
我的问题是,要从UICollectionView
中删除项目,您必须将indexPath
传递给deleteItemsAtIndexPaths
事件。由于在警报视图的didDismissWithButtonIndex
事件中授予了最终确认,因此我无法找到一种方法从那里获取所选图像的indexPath
以将其传递给deleteItemsAtIndexPaths
事件。我该怎么做?
这是我的代码:
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
switch (buttonIndex)
case 0:
deletePhotoConfirmAlert = [[UIAlertView alloc] initWithTitle:@"Remove Photo"
message:@"Do you want to remove this photo?"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:nil, nil];
[deletePhotoConfirmAlert addButtonWithTitle:@"Yes"];
[deletePhotoConfirmAlert show];
break;
case 1:
NSLog(@"To Edit photo");
break;
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
if (alertView == deletePhotoConfirmAlert)
if (buttonIndex == 1)
// Permission to delete the button is granted here.
// From here deleteItemsAtIndexPaths event should be called with the indexPath
- (void)deleteItemsAtIndexPaths:(NSArray *)indexPaths
【问题讨论】:
【参考方案1】:为什么不使用 [self.collectionView indexPathsForSelectedItems]; 。我这样做是为了一次删除多个图像。
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
if (alertView == deletePhotoConfirmAlert)
if (buttonIndex == 1)
// Permission to delete the button is granted here.
NSArray *selectedItemsIndexPaths = [self.collectionView indexPathsForSelectedItems];
// Delete the items from the data source.
[self deleteItemsFromDataSourceAtIndexPaths:selectedItemsIndexPaths];
// Now delete the items from the collection view.
[self.collectionView deleteItemsAtIndexPaths:selectedItemsIndexPaths];
// This method is for deleting the selected images from the data source array
-(void)deleteItemsFromDataSourceAtIndexPaths:(NSArray *)itemPaths
NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet];
for (NSIndexPath *itemPath in itemPaths)
[indexSet addIndex:itemPath.row];
[self.images removeObjectsAtIndexes:indexSet]; // self.images is my data source
编辑
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
NSArray *indexpaths = [self.collectionView indexPathsForSelectedItems];
DetailViewController *dest = [segue destinationViewController];
dest.imageName = [self.images objectAtIndex:[[indexpaths objectAtIndex:0] row]];
【讨论】:
我收到一个No visible @interface for 'SomeViewController' 在[self deleteItemsFromDataSourceAtIndexPaths:selectedItemsIndexPaths];
行声明选择的'deleteItemsFromDataSourceAtIndexPaths' 错误。
对不起,我忘了指出 deleteItemsFromDataSourceAtIndexPaths 是我的自定义函数,用于从我的数据源数组中删除所选图像。您可以直接在那里进行操作。 Anwy 在调用 deleteItemsAtIndexPaths: 之前从数据源数组中删除图像很重要
我明白了。现在我正在尝试使用removeObjectAtIndex
从数据源数组中删除图像。但由于它需要一个整数值,我怎样才能从 selectedItemsIndexPaths
数组中得到它?
完美运行。非常感谢,阿尼尔 :)
您好,有没有办法从NSMutableIndexSet
中获取单个索引?以上是关于从 UICollectionView 中删除一个项目的主要内容,如果未能解决你的问题,请参考以下文章
通过 NSNotification 从 UICollectionView 中删除单元格
如何快速从 UICollectionView 中的 UIView 中删除焦点阴影?
为啥我不能从我的 UICollectionView 中删除图像?
从 UICollectionView 中的 UIAttachmentBehavior 中删除振荡