如何以编程方式创建和使用UIcollectionView?

时间:2014-11-26 11:20:35

标签: ios iphone uicollectionview

我已经搜索了很多以编程方式创建UICollectionView,但没有一个建议使用它的最简单方法,如何向UICollectionViewCell添加标签或图像。大多数网站都建议UICollectionView的实施与UITableView相同,但主要区别在于我们尝试添加任何图片时。在UITableView中,我们可以在cellForRow方法中分配imageViews cell == nil并将图像分配到cell != nil)。但是在UICollectionView ItemAtIndexPath方法的情况下,cell == nil' s UITableView中没有条件(CellForRow)。因此,我们无法在UImageView方法中有效地分配itemAtIndexPath s或标签等变量。我想知道除了继承UICollectionViewCell并在该自定义类中分配变量之外是否还有其他选择?任何人都可以提供帮助,感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

在itemAtIndex方法中无法创建或分配单元格。我们需要注册自定义类以在自定义类中创建任何视图。像这样的东西:

[UICollectionView registerClass:[CustomCollectionViewClass class] forCellWithReuseIdentifier:@"cellIdentifier"];

here是我觉得有用的最佳链接。希望它能帮助别人

答案 1 :(得分:1)

swift:

   override func viewDidLoad() {
       super.viewDidLoad()

       let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
       layout.sectionInset = UIEdgeInsets(top: 20, left: 10, bottom: 10, right: 10)
       layout.itemSize = CGSize(width: 70, height: 70)

       let demoCollectionView:UICollectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
       demoCollectionView.dataSource = self
       demoCollectionView.delegate = self
       demoCollectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell")
       demoCollectionView.backgroundColor = UIColor.whiteColor()
       self.view.addSubview(demoCollectionView)
   }

   func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
       return 27
   }

   func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
       let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath)
       cell.backgroundColor = UIColor.lightGrayColor()
       return cell
   }

   func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)
  {
       print("User tapped on item \(indexPath.row)")
   }