gpt4 book ai didi

iphone - IOS - 仅将 subview 添加到某些 UICollectionView 单元格

转载 作者:行者123 更新时间:2023-11-28 22:29:01 24 4
gpt4 key购买 nike

这是我的应用程序的流程:我有带有图像缩略图的 UICollectionview。用户选择图像并点击保存按钮。图像被保存到相机胶卷。

这就是我想要做的:我想用 subview 标记用户已经点击并保存的那些单元格。我该如何实现?

这就是我已经完成的....我的方法:显然我遗漏了一些东西而且我无法解决它。

当用户点击保存按钮时,我使用核心数据成功地将这些图像的 ID 保存到本地存储。然后,我从该实体中获取对象并将这些对象放入数组中。现在,我正在尝试将获取的数组中的图像 ID 与 Collection View 中的图像 ID 进行比较,因此我只能将 subview 添加到 ID 匹配的那些单元格,这就是我被卡住的地方。我不知道这是否是正确的方法。

我愚蠢的尝试:

当用户点击保存按钮时会调用此方法,但它无法正常工作。我觉得它是随机添加 subview 。

-(void)markSavedImages
{
BOOL isMarked;

NSArray *savedImages = [self fetchSavedPhotos];

NSEnumerator *enumerator = [savedImages objectEnumerator];
NSString *savedImage;
while (savedImage = [enumerator nextObject]) {
if ([[self.eventPhotos valueForKey:@"id"] containsObject:savedImage]) {
isMarked = YES;
}
else
{
isMarked = NO;
}
}

CVCell *cell = [[CVCell alloc]init];
for (NSIndexPath *indexPath in self.livePhotosCollectionView.indexPathsForVisibleItems) {
if (isMarked) {
cell = (CVCell*)[self.livePhotosCollectionView cellForItemAtIndexPath:indexPath];

UIImageView *markedImage = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"markedCVCell.png"]];
[cell addSubview:markedImage];
[cell bringSubviewToFront:markedImage];
cell.userInteractionEnabled = NO;
}
}
}

self.eventPhotos 是一个包含图像 ID 和服务器路径的数组。

请帮帮我,我一直在用这个自杀,在谷歌上找不到任何东西。

编辑 - 根据要求

-(NSArray*)fetchSavedPhotos
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Photos" inManagedObjectContext:context];
[fetchRequest setEntity:entity];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"eventID ==[c] %@", _eventID];
[fetchRequest setPredicate:predicate];

NSError *error = nil;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
NSLog(@"No rows returned");
}

NSArray *savedImages = [fetchedObjects valueForKey:@"imageID"];
return savedImages;

}

更多信息....如果我在 markSavedImages 方法中输出 savedImages 数组,我确实得到了我想要得到的数组。像这样:(1324,2353,2324)。基本上是图像 ID 数组。

最佳答案

首先,不要只向某些单元格添加 View 。这通常会导致 View 显示在重复使用的单元格上,并且 View 的多个副本被添加到单元格中,这看起来很困惑且效率低下。

相反,将 View 添加到每个单元格。在您的单元格子类中执行此操作并使 View 公开可见或添加一个方法来显示和隐藏它。然后就这样做。每次返回单元格时,设置 subview 的可见性。这确保单元始终配置正确并且您的配置代码简单。

要禁用单元格,请使用类似的方法,始终选择单元格是否启用,并将用户交互设置为在整个单元格上启用。

对于您的数据,您有一个源图像 ID 列表和一个已保存图像 ID 列表。当您配置单元格时,您知道关联的图像 ID。要检查单元格是否应该被标记和禁用,您可以执行以下操作:

BOOL saved = [self.savedImages containsObject:imageId];

(将当前 ID 与所选 ID 列表进行比较,不要进行任何循环)。

关于iphone - IOS - 仅将 subview 添加到某些 UICollectionView 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18024936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com