【问题标题】:Remove an item from a UICollectionView从 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
{

}

【问题讨论】:

    标签: ios uicollectionview uialertview uiactionsheet


    【解决方案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 中获取单个索引?
    猜你喜欢
    • 2013-04-24
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多