如何将 ViewController 中的数组数据传递给 UICollectionView 自定义单元格?

Posted

技术标签:

【中文标题】如何将 ViewController 中的数组数据传递给 UICollectionView 自定义单元格?【英文标题】:How to pass array data inside ViewController to UICollectionView Custom Cell? 【发布时间】:2016-06-23 04:54:23 【问题描述】:

我正在自定义“UICollectionViewCell”中创建一个 tableView,在我的 ViewController 中,我有一个数组,其中包含要在 TableView 中每一行显示的数据。 因此,我想将此数组的数据传递给自定义单元格(包含 tableview 委托方法)。

我正在这样做,但没有帮助。

在“GroupCollectionViewCell.m”内

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *groupTableIdentifier = @"DeptGroupTable";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:groupTableIdentifier];

    if (cell == nil) 

    
    RoadmapViewController *vc = [[RoadmapViewController alloc] init];
    cell.textLabel.text =[vc.grouplist objectAtIndex:indexPath.row];
    return cell;

在“RoadViewController.m”内

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 

    GroupCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];

    if (cell == nil) 
        cell = [[GroupCollectionViewCell alloc] init];
        // [cell.groupData addObjectsFromArray:_grouplist];
        //:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    
    return cell;

注意 - 如果我要传递的数组和 groupData 是自定义单元格内的空白数组,则为 groupList。

【问题讨论】:

【参考方案1】:

在您的CollectionViewCell 中创建一个MutableArray 对象和一种类似这样的方法

@property (strong, nonatomic) NSMutableArray *arrObj;

-(void)loadTableData(NSMutableArray*)arr 
     self.arrObj = arr;
     [self.tableView reloadData];
     //Now used this arrObj in your delegate and datasource method

然后像这样从cellForItemAtIndexPath调用这个函数

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 


    GroupCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
    if (cell == nil) 
        cell = [[GroupCollectionViewCell alloc] init];
        // [cell.groupData addObjectsFromArray:_grouplist];
        //:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    
    [cell loadTableData:arr];
    return cell;

希望这会对你有所帮助。

【讨论】:

一切都很好,但我不知道为什么我无法从“cell”获取“loadTableData”方法。 对不起,我忘了你需要在CollectionViewCell.h 文件中声明这个方法。声明该方法,它将对您可用。 我已经声明过了。我认为 cell.loadTableData(arr) 不起作用。我需要以其他方式使用。 你需要这样写[cell loadTableData:arr];我已经用swift写了。我已经编辑了我的答案检查。【参考方案2】:

如果你使用alloc init创建RoadmapViewController并从中得到grouplist,很明显你的vc.grouplist会返回nil

删除这两行:

RoadmapViewController *vc = [[RoadmapViewController alloc] init];
cell.textLabel.text =[vc.grouplist objectAtIndex:indexPath.row];

然后这样做:

cell.textLabel.text =[_groupData objectAtIndex:indexPath.row];

并在“RoadViewController.m”中添加这个方法:

- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(GroupCollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath        
    cell.groupData = _groupList;
    [collectionView reloadData];

【讨论】:

以上是关于如何将 ViewController 中的数组数据传递给 UICollectionView 自定义单元格?的主要内容,如果未能解决你的问题,请参考以下文章

将数组数据从 ViewController 传递到 TableView

如何使用核心数据访问保存在不同视图控制器中的阵列?

将数组从 ViewController 传递给 AppDelegate

如何将数组值从 ViewController 的协议传递到另一个 ViewController

如何将 viewController 中的数据分配给 tableViewCell 标签?

如何强制 ViewController 将 'b' 而不是 'a' 中的数据导出到下一个 VC?