我有一个非常讨厌的问题。我想要做的是将6个图像视图绘制到一个单元格中。在以下屏幕上,您可以看到我想要实现的目标。
这就是我在cellForRowAtIndexPath中所做的事情
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
for(int i=0;i<5;i++)
{
float xCoord = 30.0;
Team *team = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSData* imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:team.image]];
UIImage* image = [[UIImage alloc] initWithData:imageData];
UIImageView* imgView = [[UIImageView alloc] initWithImage:image];
[imgView setFrame:CGRectMake(xCoord,0,66,66)];
[cell.contentView addSubview:imgView];
xCoord += imgView.frame.size.width + 5;
NSLog(@"%f",xCoord);
[cell.contentView clearsContextBeforeDrawing];
}
return cell;
}
有人能帮助我吗?
答案 0 :(得分:2)
即使您在计算每次迭代中重置为30的x
坐标修复错误之后,您仍然会遇到重复使用单元格的问题:您的程序会向单元格添加新的UIImageView
s ,即使它已经包含五个UIImageView
个对象。经过几轮重复使用后,单元格会有几十个图像相互叠加,对性能产生灾难性影响 - 特别是滚动性能。
你应该定义UITableViewCell
的自定义子类,其中六个UIImageView
个对象被添加为子视图,给它一个像这样的方法
-(void)setImage:(UIImage*)image forPosition:(NSUInteger)position;
并在循环中调用此方法(如果你想要六个图像,循环应该有i <= 5
,而不是i < 5
作为其结束条件。)
编辑:以下是一种过于简化的编码方式:
CustomCell.h:
#define NUM_PICS 6
@interface SixPicsCell : UITableViewCell {
UIImageView *pics[NUM_PICS];
}
-(void)setImage:(UIImage*)image forPosition:(NSUInteger)position;
- (id)initWithStyle:(UITableViewCellStyle)style
reuseIdentifier:(NSString *)reuseIdentifier
@end
CustomCell.m:
- (id)initWithStyle:(UITableViewCellStyle)style
reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
for (int i = 0 ; i != NUM_PICS ; i++) {
pics[i] = [[UIImageView alloc] initWithImage:nil];
[pics[i] setFrame:CGRectMake(30+71*i, 0, 66, 66)];
[self.contentView addSubview:pics[i]];
}
}
return self;
}
-(void)setImage:(UIImage*)image forPosition:(NSUInteger)position {
pics[position].image = image;
}
答案 1 :(得分:0)
大声笑,我之前已经回答了这个问题。
(到目前为止)最简单的方法是使用UICollectionView(但是想要推出到iOS 5的IIRC)。
要解决重用和内存的问题(并且还可以在每一行中拥有无限的条目),您可以使用包含自己的UITableView(旋转90度)的自定义cUITableViewCell。然后,这可以显示任意数量的图像,因为每个图像再次位于其自己的单元格内。
这听起来很复杂,但如果你把它分解,那真的不是。
答案 2 :(得分:0)
这是网格视图的一种情况..
尝试以下内容供您参考
int rows = 5;
int columns = 4 //
for (int j=0; j<rows; j++) {
int xPos=0;
for (int i=0; i<columns; i++) {
UIImageView *backImg=[[UIImageView alloc]initWithFrame:CGRectMake(3+xPos,3+yPos, 104, 140)];
[backImg setImage:[UIImage imageNamed:@"your image.png"]];
[backImg setBackgroundColor:[UIColor clearColor]];
[cell.contentView addSubView:backImg];
xPos+=105;
}//columns end
yPos +=140;
}//rows end