我有这段代码在集合视图中添加新单元格。委托和数据源已正确设置。但是集合视图单元格没有显示任何内容。好吧,当我调试它时,它显示单元格已创建,但单元格除了UIView
之外什么都没有,我希望它应该包含一个UIButton
,里面有UIImageView
- (void)viewDidLoad {
[super viewDidLoad];
[self setImgGallery:[[NSMutableArray alloc] init]];
[[self cvPictureGallery] registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"new"];
[[self cvPictureGallery] registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"review"];
// add 5 UIImage test to imgGallery.
for (int i = 0; i < 5; i++) {
[[self imgGallery] addObject:[UIImage named:@"test.png"]];
}
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return MIN ([[self imgGallery] count] + 1, 5);
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
if ([indexPath row] == [[self imgGallery] count]) { // show the camera icon
UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"new" forIndexPath:indexPath];
if (cell == nil) {
/*
cell
- contentView
- button
- camera icon
*/
cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
UIImageView * imgCameraIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"camera.png"]];
[imgCameraIcon setFrame:CGRectMake(0, 0, 50, 50)];
[imgCameraIcon setContentMode:UIViewContentModeScaleAspectFit];
UIButton * btnCamera = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[btnCamera addSubview:btnCamera];
[btnCamera addTarget:self action:@selector(openCameraTapped) forControlEvents:UIControlEventTouchUpInside];
[imgCameraIcon setCenter:CGPointMake([btnCamera width] / 2, [btnCamera height] / 2)];
[cell addSubview:btnCamera];
[cell setBackgroundColor:[UIColor whiteColor]];
[collectionView registerClass:[cell class] forCellWithReuseIdentifier:@"new"];
}
return cell;
}
else {
UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"review" forIndexPath:indexPath];
if (cell == nil) {
/*
cell
- contentView
- button
- image selected
*/
cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
UIImageView * imgSelected = [[UIImageView alloc] initWithImage:[[self imgGallery] objectAtIndex:[indexPath row]]];
[imgSelected setFrame:CGRectMake(0, 0, 100, 100)];
[imgSelected setContentMode:UIViewContentModeScaleAspectFill];
[imgSelected setTag:1];
UIButton * btnCamera = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[btnCamera addSubview:btnCamera];
[btnCamera addTarget:self action:@selector(imageTapped) forControlEvents:UIControlEventTouchUpInside];
[imgSelected setCenter:CGPointMake([btnCamera width] / 2, [btnCamera height] / 2)];
[cell addSubview:btnCamera];
[collectionView registerClass:[cell class] forCellWithReuseIdentifier:@"review"];
}
return cell;
}
}
我已经使用了这些质量保证的参考资料:
registerClass
。编辑:根据接受的答案和讨论,这是我更新的代码,但仍然没有显示任何内容:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
if ([indexPath row] == [[self imgGallery] count]) { // show the camera icon
UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"new" forIndexPath:indexPath];
if (cell == nil) {
/*
cell
- contentView
- button
- camera icon
*/
cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
UIImageView * imgCameraIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"camera.png"]];
[imgCameraIcon setFrame:CGRectMake(0, 0, 50, 50)];
[imgCameraIcon setContentMode:UIViewContentModeScaleAspectFit];
[imgCameraIcon setTag:1];
UIButton * btnCamera = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[btnCamera addSubview:imgCameraIcon];
[btnCamera addTarget:self action:@selector(openCameraTapped) forControlEvents:UIControlEventTouchUpInside];
[btnCamera setTag:2];
[imgCameraIcon setCenter:CGPointMake([btnCamera width] / 2, [btnCamera height] / 2)];
[cell addSubview:btnCamera];
[cell setBackgroundColor:[UIColor whiteColor]];
[collectionView registerClass:[cell class] forCellWithReuseIdentifier:@"new"];
}
UIImageView * imgCameraIcon = (UIImageView *) [cell viewWithTag:1];
[imgCameraIcon setImage:[UIImage imageNamed:@"camera.png"]];
NSLog (@"Subview count:%lu", (unsigned long)[[cell subviews] count]);
return cell;
}
else {
UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"review" forIndexPath:indexPath];
if (cell == nil) {
/*
cell
- contentView
- button
- image selected
*/
cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
UIImageView * imgSelected = [[UIImageView alloc] initWithImage:[[self imgGallery] objectAtIndex:[indexPath row]]];
[imgSelected setFrame:CGRectMake(0, 0, 100, 100)];
[imgSelected setContentMode:UIViewContentModeScaleAspectFill];
[imgSelected setClipsToBounds:YES];
[imgSelected setTag:1];
UIButton * btnImage = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[btnImage addSubview:imgSelected];
[btnImage addTarget:self action:@selector(imageTapped) forControlEvents:UIControlEventTouchUpInside];
[btnImage setTag:2];
[imgSelected setCenter:CGPointMake([btnImage width] / 2, [btnImage height] / 2)];
[cell addSubview:btnImage];
}
UIImageView * imgSelected = (UIImageView *) [cell viewWithTag:1];
[imgSelected setImage:[[self imgGallery] objectAtIndex:[indexPath row]]];
NSLog (@"Subview count:%lu", (unsigned long)[[cell subviews] count]);
return cell;
}
}
子视图计数的结果始终为1.下面是工作计数,但子视图计数每次都在增加。
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
if ([indexPath row] == [[self imgGallery] count]) { // show the camera icon
UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"new" forIndexPath:indexPath];
if (cell == nil) {
/*
cell
- contentView
- button
- camera icon
*/
cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
}
UIImageView * imgCameraIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"camera.png"]];
[imgCameraIcon setFrame:CGRectMake(0, 0, 50, 50)];
[imgCameraIcon setContentMode:UIViewContentModeScaleAspectFit];
UIButton * btnCamera = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[btnCamera addSubview:imgCameraIcon];
[btnCamera addTarget:self action:@selector(openCameraTapped) forControlEvents:UIControlEventTouchUpInside];
[imgCameraIcon setCenter:CGPointMake([btnCamera width] / 2, [btnCamera height] / 2)];
[cell addSubview:btnCamera];
[cell setBackgroundColor:[UIColor whiteColor]];
[collectionView registerClass:[cell class] forCellWithReuseIdentifier:@"new"];
NSLog (@"Subview count:%lu", (unsigned long)[[cell subviews] count]);
return cell;
}
else {
UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"review" forIndexPath:indexPath];
if (cell == nil) {
/*
cell
- contentView
- button
- image selected
*/
cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
}
UIImageView * imgSelected = [[UIImageView alloc] initWithImage:[[self imgGallery] objectAtIndex:[indexPath row]]];
[imgSelected setFrame:CGRectMake(0, 0, 100, 100)];
[imgSelected setContentMode:UIViewContentModeScaleAspectFill];
[imgSelected setClipsToBounds:YES];
[imgSelected setTag:1];
UIButton * btnImage = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[btnImage addSubview:imgSelected];
[btnImage addTarget:self action:@selector(imageTapped) forControlEvents:UIControlEventTouchUpInside];
[imgSelected setCenter:CGPointMake([btnImage width] / 2, [btnImage height] / 2)];
[cell addSubview:btnImage];
[collectionView registerClass:[cell class] forCellWithReuseIdentifier:@"review"];
NSLog (@"Subview count:%lu", (unsigned long)[[cell subviews] count]);
return cell;
}
}
答案 0 :(得分:2)
我不确定您的问题的标题是否与您的查询有关,但请更换一行:
[btnCamera addSubView:btnCamera]
与
[btnCamera addSubView:imgCameraIcon]
答案 1 :(得分:2)
我认为你写错了代码来创建单元格。请更新您的代码,如下所示,并查看输出
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
if ([indexPath row] == [[self imgGallery] count]) { // show the camera icon
UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"new" forIndexPath:indexPath];
if (cell == nil) {
/*
cell
- contentView
- button
- camera icon
*/
cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
}
UIImageView * imgCameraIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"camera.png"]];
[imgCameraIcon setFrame:CGRectMake(0, 0, 50, 50)];
[imgCameraIcon setContentMode:UIViewContentModeScaleAspectFit];
UIButton * btnCamera = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[btnCamera addSubview:btnCamera];
[btnCamera addTarget:self action:@selector(openCameraTapped) forControlEvents:UIControlEventTouchUpInside];
[imgCameraIcon setCenter:CGPointMake([btnCamera width] / 2, [btnCamera height] / 2)];
[cell addSubview:btnCamera];
[cell setBackgroundColor:[UIColor whiteColor]];
[collectionView registerClass:[cell class] forCellWithReuseIdentifier:@"new"];
return cell;
}
else {
UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"review" forIndexPath:indexPath];
if (cell == nil) {
/*
cell
- contentView
- button
- image selected
*/
cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
}
UIImageView * imgSelected = [[UIImageView alloc] initWithImage:[[self imgGallery] objectAtIndex:[indexPath row]]];
[imgSelected setFrame:CGRectMake(0, 0, 100, 100)];
[imgSelected setContentMode:UIViewContentModeScaleAspectFill];
[imgSelected setTag:1];
UIButton * btnCamera = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[btnCamera addSubview:btnCamera];
[btnCamera addTarget:self action:@selector(imageTapped) forControlEvents:UIControlEventTouchUpInside];
[imgSelected setCenter:CGPointMake([btnCamera width] / 2, [btnCamera height] / 2)];
[cell addSubview:btnCamera];
[collectionView registerClass:[cell class] forCellWithReuseIdentifier:@"review"];
return cell;
}
}