• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 从包含 UITableView 中多个单元格的行中删除选定的图像

[复制链接]
菜鸟教程小白 发表于 2022-12-12 16:08:20 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个包含图像列表的 UITableView,每行包含 4 个 UITableViewCell, 用户可以选择多个图像(选择是通过在单元格上隐藏和显示覆盖图像) 我想要做的是当用户单击删除按钮时从我的表中删除选定的图像。

以下是部分代码:

- (UITableViewCell *)tableViewUITableView *)tableView cellForRowAtIndexPathNSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";    
ThumbnailImageCell *cell = (ThumbnailImageCell *)[tableView dequeueReusableCellWithIdentifier"Cell"];

if (cell == nil)
{               
    cell = [[[ThumbnailImageCell alloc] initWithManagedImages:[self imagesForIndexPath:indexPath] reuseIdentifier:CellIdentifier] autorelease];
}   
else
{       
    [cell setImages:[self imagesForIndexPath:indexPath]];
}

return cell;}



-(NSArray*)imagesForIndexPathNSIndexPath*)_indexPath {

int index = (_indexPath.row*4);
int maxIndex = (_indexPath.row*4+3);

if(maxIndex < [self.imagesArray count]) {

    return [NSArray arrayWithObjects:[self.imagesArray objectAtIndex:index],
            [self.imagesArray objectAtIndex:index+1],
            [self.imagesArray objectAtIndex:index+2],
            [self.imagesArray objectAtIndex:index+3],
            nil];
}

else if(maxIndex-1 < [self.imagesArray count]) {

    return [NSArray arrayWithObjects:[self.imagesArray objectAtIndex:index],
            [self.imagesArray objectAtIndex:index+1],
            [self.imagesArray objectAtIndex:index+2],
            nil];
}

else if(maxIndex-2 < [self.imagesArray count]) {

    return [NSArray arrayWithObjects:[self.imagesArray objectAtIndex:index],
            [self.imagesArray objectAtIndex:index+1],
            nil];
}

else if(maxIndex-3 < [self.imagesArray count]) {

    return [NSArray arrayWithObject:[self.imagesArray objectAtIndex:index]];
}

return nil;
}

- (NSInteger)tableViewUITableView *)tableView numberOfRowsInSectionNSInteger)section {
return ceil([self.imagesArray count] / 4.0);
}

我尝试做的是以下但到目前为止没有任何成功

-(void)finishDeleting{
int countOfDeletedThread;
[self setEditing:YES animated:YES];
[self.tableView beginUpdates];

NSMutableIndexSet *mutableIndexSet = [[NSMutableIndexSet alloc] init];
NSMutableArray *indexToDelete = [[NSMutableArray alloc] init];
NSIndexPath *indexPath ;

for(ThumbnailImage *thumbnailImage in self.imagesArray)
{
    if([thumbnailImage selected])
    {
       countOfDeletedThread = countOfDeletedThread+1;
       indexPath = [NSIndexPath indexPathForRow:countOfDeletedThread inSection:0];

        [indexToDelete addObject:indexPath];
        [mutableIndexSet addIndex:indexPath.row];

    }
}
[self.imagesArray removeObjectsAtIndexes:mutableIndexSet];
[self.tableView deleteRowsAtIndexPaths:indexToDelete withRowAnimation:UITableViewRowAnimationFade];

[indexToDelete release];
[mutableIndexSet release];

[self.tableView endUpdates];
[self.tableView setEditing:NO animated:YES];
[self.tableView reloadData];
[CATransaction flush];}

有什么帮助吗?我被困了2天,不知道该怎么办。

谢谢。



Best Answer-推荐答案


如果我理解正确,每个表格行有 4 个 UIImageView,而不是 4 UITableViewCells。这意味着如果您删除图像的一个子集,剩下的 图像将在所有行中“重排”。因此使用没有意义 beginUpdates/deleteRowsAtIndexPaths/endUpdates。你可能应该只是

  • 从数据源数组中移除选中的图片self.imagesArray,
  • 调用[self.tableView reloadData]

从数组中移除选中的图片可以稍微简化为

NSIndexSet *indexSet = [self.imagesArray indexesOfObjectsPassingTest:^BOOL(ThumbnailImage *thumbnailImage, NSUInteger idx, BOOL *stop) {
    return [thumbnailImage selected];
}];
[self.imagesArray removeObjectsAtIndexes:indexSet];

请注意 UICollectionView (自 iOS 6 起可用)可能更适合显示 每行多张图片。

关于ios - 从包含 UITableView 中多个单元格的行中删除选定的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19741005/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap