在我的控制器中,我解析来自JSON数组的数据并使用它来填充集合视图。下面的代码成功加载并显示数据,但无法创建单独的部分。
因此,如何修改代码以为数组中的每个对象创建节。例如,如果我的数组有50个网址,我该如何为每个网址创建一个部分?
let lastItem = self.photos.count
self.photos.addObjectsFromArray(photoInfos)
let indexPaths = (lastItem..<self.photos.count).map { NSIndexPath(forItem: $0, inSection: 0) }
dispatch_async(dispatch_get_main_queue()) {
self.collectionView!.insertItemsAtIndexPaths(indexPaths)
}
答案 0 :(得分:1)
大多数情况下,应用程序使用本节中的一个部分和许多项目,这就是为什么找到如何按照自己的方式进行操作可能会有点困难。
关于如何使用数据源的这两个函数:
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return self.items.count
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 1
}
通常你会在numberOfItemsInSection中返回1个部分和数组计数,但是如果你切换它们就可以得到你想要的部分。
答案 1 :(得分:1)
这是我的代码在Objective-C中,我希望它对您有所帮助。
此处HeaderView
是UICollectionReusableView
的子类。
您可以根据需要设置视图。
-(CGSize) collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section {
return CGSizeMake(320.0f, 32.0f);
}
-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
HeaderView *view=(HeaderView *)[historyCollection dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"headerView" forIndexPath:indexPath];
NSArray *viewsToRemove = [view subviews];
for (UIView *v in viewsToRemove) {
[v removeFromSuperview];
}
view.backgroundColor=[UIColor clearColor];
self.month = [[UILabel alloc] initWithFrame:CGRectMake(0, 5, 320, 21)];
self.month.text =[[monthList objectAtIndex:indexPath.section] uppercaseString];
self.month.textColor = [UIColor greenColor];
self.month.font=[UIFont boldSystemFontOfSize:17];
[view addSubview:self.month];
return view;
}
- (CGFloat)collectionView:(UICollectionView *)collectionView heightForHeaderInSection:(NSInteger)section {
if (section == 0) {
return 0;
}
else if (section == 1) {
return 40.0;
}
else {
return 50;
}
}
答案 2 :(得分:0)
这是适合我的代码 创建标题单元格。为此我创建了一个自定义单元格类和一个nib来在图形编辑器中自定义单元格
在viewDidLoad
中self.collectionView?.registerNib(UINib(nibName: "KlosetCollectionHeaderViewCell", bundle: nil), forSupplementaryViewOfKind:UICollectionElementKindSectionHeader, withReuseIdentifier: "HeaderCell")
然后添加委托函数
override func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> KlosetCollectionHeaderViewCell {
println("entring viewforsuppplementaryElementofKind")
var headerCell = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "HeaderCell", forIndexPath: indexPath) as? KlosetCollectionHeaderViewCell
return headerCell!
}
这会将HeaderCell置于SectionView
的{{1}}
单元格中显示的控件,您将它们添加到xib文件以及出口和操作