如何在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 单元格保存到数组中?

如何在表格视图中显示数组值

如何更改表格视图中的标签文本颜色(存储在数组中的数据)

iOS - 使用 Swift 在每个表格视图单元格中获取 JSON 提要

如何从核心数据中获取数据并在表格视图中显示 iOS 6

按下表格视图部分按钮时如何加载不同的数组?