如何在ios的表格视图中绑定数组数据?
Posted
技术标签:
【中文标题】如何在ios的表格视图中绑定数组数据?【英文标题】:How to bind array data in table view in ios? 【发布时间】:2015-08-29 23:59:33 【问题描述】:我有一个自定义表格视图单元格,在自定义表格视图单元格中有 4-5 个图像。我正在尝试在单元格中绑定数据,但图像在第一个单元格之后重复。我想要的只是将数组的所有 url 映射到我的 uiimageview 的所有表格视图单元格,就像谷歌图像的图像部分一样。
这是我想要实现的截图:
这是我目前所得到的:
这是我的代码:
- (void)viewDidLoad
[super viewDidLoad];
urlArray = [NSArray arrayWithObjects:
@"http://www.w3schools.com/images/w3schools_green.jpg",
@"https://farm1.staticflickr.com/2/1418878_1e92283336_m.jpg",
@"http://i.share.pho.to/68bd6b4c_o.jpeg",
@"http://i.share.pho.to/a9cf8966_o.jpeg",
@"http://i.share.pho.to/934e487c_o.jpeg",
@"http://i.share.pho.to/6343e165_o.jpeg",
@"http://i.share.pho.to/99a3ffd0_o.jpeg",
@"http://i.share.pho.to/9968ab24_o.jpeg",
@"http://i.share.pho.to/9968ab24_o.jpeg",
@"http://i.share.pho.to/a4cc0bac_o.jpeg",
nil];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
FzTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
NSData * imageData1 = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: [urlArray objectAtIndex:indexPath.row]]];
NSData * imageData2 = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: [urlArray objectAtIndex:indexPath.row + 1]]];
NSData * imageData3 = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: [urlArray objectAtIndex:indexPath.row+2]]];
NSData * imageData4 = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: [urlArray objectAtIndex:indexPath.row +3]]];
NSData * imageData5 = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: [urlArray objectAtIndex:indexPath.row+4]]];
NSData * imageData6 = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: [urlArray objectAtIndex:indexPath.row+5]]];
// Configure the cell...
cell.img1.image = [UIImage imageWithData: imageData1];
cell.img2.image = [UIImage imageWithData: imageData2];
cell.img3.image = [UIImage imageWithData: imageData3];
cell.img4.image = [UIImage imageWithData: imageData4];
cell.img5.image = [UIImage imageWithData: imageData5];
cell.img6.image = [UIImage imageWithData: imageData6];
return cell;
【问题讨论】:
【参考方案1】:"cellForRowAtIndexPath" 配置单个单元格,并为列表中的每个单元格调用。因此,对于第一个单元格,它将使用数组索引设置 6 个图像
[0,1,2,3,4,5]
第二次调用它(对于第二个单元格)它将使用索引
[2,3,4,5,6]
要得到你所问的,你必须使用:
int mappedIndex = indexPath.Row*6;
然后对于每个cellImage
cell.img1.image =mappedIndex; cell.img1.image =mappedIndex+1; cell.img1.image =mappedIndex+2;
等
这样,您对单元格 1 的索引将是:
For cell 1: [0,1,2,3,4,5]
For cell 2: [6,7,8,9,10,11]
For cell 3: [12,13,14,15,16]
等 显然,您需要一个更大的数组才能使其正常工作。我认为你真的应该使用 UICollectionView 来实现这个想法。 UICollectionView 处理单元格的“网格”。然后它会为您提供每个单元格被按下时的事件等。
希望这会有所帮助。
【讨论】:
你能告诉我如何使用集合视图来实现这一点吗?【参考方案2】:如果你想使用 UICollectionView 来实现,你应该用集合视图替换你的 tableview 或者使用 UICollectionViewController。
它与 UITableview 非常相似,除了每个单元格是单元格“网格”而不是行的一部分 - 它具有类似的委托回调,用于配置单元格和获取每个部分的计数等。
我在这里解释的太多了,但是您可以按照以下教程进行操作:http://www.raywenderlich.com/22324/beginning-uicollectionview-in-ios-6-part-12
我相信该教程还解释了如何异步加载图像(因此下载图像的网络操作不会导致您的应用在下载过程中冻结)。
【讨论】:
以上是关于如何在ios的表格视图中绑定数组数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS Swift 中将选定的 tableView 单元格保存到数组中?