在UICollectionView中创建节

时间:2015-04-28 02:49:29

标签: ios iphone swift uicollectionview

在我的控制器中,我解析来自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)
                }

3 个答案:

答案 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中,我希望它对您有所帮助。 此处HeaderViewUICollectionReusableView的子类。 您可以根据需要设置视图。

-(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文件以及出口和操作