我还没有找到解决这个问题的方法。我已将视频附加到我的应用中,以便将其视为实际操作。
问题发布在最近发生的事情和应该发生的事情的底部。
https://www.mediacloud.cc/a/public/85156c9d4867ec82a42002e21954ee70.php?lang=en
我使用单例方法在我的两个视图控制器之间传递数据,因为它们没有直接连接。
我正在使用的4个相关类是MyAppDelegate,CameraViewController,TableViewController和CaptureSession。
我的appDelegate.h课程
@property (nonatomic, retain) NSMutableArray *emailProperty;
@property (nonatomic, retain) NSMutableArray *imageProperty;
@property (nonatomic, retain) NSMutableDictionary *dictionaryProperty;
@property (nonatomic, retain) NSString *emailStringProperty;
@property (nonatomic, retain) UIImage *assetImageProperty;
@property (nonatomic, retain) UIImage *captureImageProperty;
+ (id)sharedManager;
我的appDelegate.m类
@synthesize emailProperty;
@synthesize imageProperty;
@synthesize dictionaryProperty;
@synthesize emailStringProperty;
@synthesize assetImageProperty;
@synthesize captureImageProperty;
#pragma mark Singleton Methods
+ (id)sharedManager {
static MediaCloudAppDelegate *sharedMyManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedMyManager = [[self alloc] init];
});
return sharedMyManager;
}
- (id)init {
if (self = [super init]) {
emailProperty = [NSMutableArray array];
imageProperty = [NSMutableArray array];
dictionaryProperty = [NSMutableDictionary dictionary];
}
return self;
}
CameraViewController.m类
当用户在CameraViewController中时,他会在触摸事件后立即按下“拍照”,弹出UIalertview以要求他输入他的电子邮件。 这是处理用户输入的代码。
_emailString1 = [alertView textFieldAtIndex:0].text;
MediaCloudAppDelegate *sharedManager = [MediaCloudAppDelegate sharedManager];
sharedManager.emailStringProperty = _emailString1;
[sharedManager.emailProperty addObject:sharedManager.emailStringProperty];
用户输入电子邮件并点击确定后,他们现在可以拍照了。
因为我正在使用AVCapturesSession拍摄照片。这是代码。
CaptureSession.m类
NSData *imageData = [AVCaptureStillImageOutput
jpegStillImageNSDataRepresentation:imageSampleBuffer];
UIImage *image = [[UIImage alloc] initWithData:imageData];
[self setStillImage:image];
MediaCloudAppDelegate *sharedManager = [MediaCloudAppDelegate sharedManager];
sharedManager.captureImageProperty = image;
[sharedManager.dictionaryProperty setObject:sharedManager.captureImageProperty
forKey:sharedManager.emailStringProperty];
[sharedManager.imageProperty addObject:sharedManager.dictionaryProperty];
NSLog(@"image %@", sharedManager.imageProperty);
照片拍摄后我记录输出。
例如。让我们说用户的电子邮件是bob@email.com并拍下他自己的照片。
我的NSLog(@“image%@”,sharedManager.imageProperty);是图像
{
bob@email.com = "UIImage: 0x1568d8c0";
}
现在要显示应用程序所拍摄的所有照片和电子邮件,我们将转到TableViewController。
TableViewController.m类
我的表格视图设计是这样的。在一个单元格中,我有一个UICollectionView,在右边我有一个UILabel。
我会像这样显示电子邮件数组。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
MediaCloudAppDelegate *sharedManager = [MediaCloudAppDelegate sharedManager];
// Return the number of rows in the section.
return sharedManager.emailProperty.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath
{
static NSString *CellIdentifier = @"Cell";
EmailViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier
forIndexPath:indexPath];
MediaCloudAppDelegate *sharedManager = [MediaCloudAppDelegate sharedManager];
cell.emailLabel.text = [sharedManager.emailProperty objectAtIndex:indexPath.row];
return cell;
}
要在单元格内的集合视图中显示照片,我就这样做了。
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath{
static NSString *identifier = @"Cell";
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier
forIndexPath:indexPath];
UIImageView *imageView = (UIImageView *)[cell viewWithTag:100];
MediaCloudAppDelegate *sharedManager = [MediaCloudAppDelegate sharedManager];
sharedManager.dictionaryProperty = [sharedManager.imageProperty objectAtIndex:indexPath.row];
imageView.image = [sharedManager.dictionaryProperty
objectForKey:sharedManager.emailStringProperty];
return cell;
}
现在一切正常,唯一的问题是每个单元格中的每个集合视图都显示整个照片数组,而不是与唯一电子邮件字符串关联的照片。
所以,如果我有行。
第1行是Bob 第2排是杰夫 第3行是戴夫
我们有一张每个人的照片。 Bob的行中的Collection View应该只显示Bob的图片。 Jeff的行中的Collection视图应该只显示Jeff的图片,依此类推。 现在的问题是。 Bob的行中的Collection View显示了所有三个人的照片,而另外两个人的照片也是如此。
我不知道如何让它发挥作用。
提前感谢您的帮助!
答案 0 :(得分:1)
您应该将要在每个tableView单元格中显示的图像存储为数组,然后将该数组传递给单个collectionView实例。您不能只使用一个数组来存储所有图像,并期望各种collectionViews选择要显示的图像。 (嗯,你可以,但这更难了)
传递cellForRowAtIndexPath
中信息的方式取决于您的自定义Cell对象的组织方式。
执行此操作的一种方法是将每个数组存储在字典中,并由用户电子邮件键入。另一种方法是将所有数组存储在另一个主数组中,由indexPath.row索引。
如果不清楚,请告诉我。因此,当您捕获图像时,将其添加到数组并将其存储在一个数组中,然后将其添加到您的字典中:
sharedManager.captureImageProperty = image;
NSMutableArray *array = sharedManager.dictionaryProperty[sharedManager.emailStringProperty];
if (!array) array = [NSMutableArray new];
[array addObject: sharedManager.captureImageProperty];
[sharedManager.dictionaryProperty setObject:array
forKey:sharedManager.emailStringProperty];
然后从字典中取出数组并将其传递给每个单元格的collectionView。
在collectionView cellForItemAtIndexPath中,实现以下内容:
sharedManager.dictionaryProperty = [sharedManager.imageProperty objectAtIndex:indexPath.item];
//新
NSArray *array = [sharedManager.dictionaryProperty objectForKey:sharedManager.emailStringProperty];
imageView.image = array[indexPath.item];