使用 NSArray 填充 collectionView
Using NSArray to populate collectionView
我是 Objective-C 的新手,我有一个接受 NSArray 作为参数的函数,现在我想存储该数组在我的函数中的本地 var 中,然后通过该数组填充集合视图,ps 我还必须在相同的 class.[=14= 中更新 cellForItemAtIndexPath
委托方法]
这是tableView的Cell中的方法class。在这里,我在单元格中嵌入了一个 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。我希望你们现在得到照片。
试试这个;
编译指示 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;
}
您需要在单元格 class 中添加一个 属性 来保存数组:
@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];
}
您可以在单元格 class 的 cellForItemAt
方法中使用此数组。
此外,在您的单元格 classes 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;
}
我是 Objective-C 的新手,我有一个接受 NSArray 作为参数的函数,现在我想存储该数组在我的函数中的本地 var 中,然后通过该数组填充集合视图,ps 我还必须在相同的 class.[=14= 中更新 cellForItemAtIndexPath
委托方法]
这是tableView的Cell中的方法class。在这里,我在单元格中嵌入了一个 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。我希望你们现在得到照片。
试试这个;
编译指示 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;
}
您需要在单元格 class 中添加一个 属性 来保存数组:
@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];
}
您可以在单元格 class 的 cellForItemAt
方法中使用此数组。
此外,在您的单元格 classes 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;
}