使用NSArray填充collectionView

时间:2017-07-28 06:32:16

标签: ios objective-c uicollectionview nsarray

我是 Objective-C 的新手,我有一个函数接受 NSArray 作为参数现在我想将该数组存储在我的函数中的本地var中然后通过该数组填充集合视图,ps我还必须在同一个类中更新cellForItemAtIndexPath委托方法。

这是tableView的Cell类中的方法。在这里,我在单元格中嵌入了一个collectionView。

-(void)initCellWithSetsArray:(NSArray *)setsArray{

NSMutableArray *setArray = [NSMutableArray array];    
}

这是我调用此方法的方法,它接受cellForRowAt tableView的委托方法中的数组。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        [cell initCellWithSetsArray :self.setsHistoryArray];
}

所以我需要在cellForRowAtIndexPath中调用时根据func中解析的数组更新collectionView。我希望你们现在能得到这张照片。

2 个答案:

答案 0 :(得分:1)

您需要向单元类添加一个属性来保存数组:

@property (strong, nonatomic) NSArray *setsArray;

-(void) setSetsArray(NSArray *)sets {
     _setsArray = sets;
     [self.collectionView reloadData];
}

- (NSInteger)collectionView:(UICollectionView *)collectionView 
 numberOfItemsInSection:(NSInteger)section {
    return [self.setsArray count];
}

您可以在单元格类的cellForItemAt方法中使用此数组。

此外,在您的单元格类prepareForReuse中,您应该清除现有数组并重新加载集合视图:

-(void)prepareForReuse {
    self.setsArray = nil;
    [self.collectionView reloadData];
}

然后,您只需在cellForRowAt:

中分配属性即可
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    MyCellClass *cell = (MyCellClass *)[tableView dequeueReusableCellWithIdentifier:"MyCellIdentifier" forIndexPath:indexPath];
    cell.setsArray = self.setsHistoryArray;  // Note: This looks wrong; - you should normally use indexPath.row to get the right data for this row
    return cell;
}

答案 1 :(得分:0)

试试这个;

pragma mark CollectionView

-(NSInteger) numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
    return 1;
}

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return arrNames.count;
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"areacell" forIndexPath:indexPath];


    UILabel *lblName = (UILabel *)[cell viewWithTag:101]; // set tag in storyboard for this label
    lblName.text = arrNames[indexPath.item];

    return cell;
}