在swift中的UITableViewCell中自定义UICollectionView

时间:2016-04-07 06:55:48

标签: ios swift uitableview uicollectionview

我在UICollectionView没有UITableViewCell的情况下创建了自定义Main.Storyboard。但是cellForItemAtIndexPath方法没有被调用,所以你可以帮助我以最好的方式解决它。

enter image description here

这是我的代码:

class IndexRow: UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {

var names:[String] = ["Movie 1","Movie 2","Movie 3","Movie 4","Movie 5","Movie 6"]



@IBOutlet weak var collectionView: UICollectionView!
override func awakeFromNib() {
    super.awakeFromNib()
    print("Hello")
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return names.count
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = self.collectionView.dequeueReusableCellWithReuseIdentifier("videoCell", forIndexPath: indexPath) as UICollectionViewCell
    //let url:NSURL = NSURL(string: names[indexPath.row])!
    //let dt :NSData = NSData(contentsOfURL: url)!
    print("Hello collection")
    let imageView:UIImageView = UIImageView(frame: CGRectMake(5, 5, 180, 270))
    imageView.image = UIImage(named: "poster.jpg")
    imageView.contentMode = .ScaleAspectFit
    cell.addSubview(imageView)

    let lableView:UILabel = UILabel(frame: CGRectMake(5,300,180,35))
    lableView.text = names[indexPath.row]
    lableView.textAlignment = NSTextAlignment.Center
    cell.addSubview(lableView)

    return cell
}

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    let itemsPerRow:CGFloat = 2
    let hardCodedPadding:CGFloat = 0
    let itemWidth = (collectionView.bounds.width / itemsPerRow) - hardCodedPadding
    let itemHeight = collectionView.bounds.height - (hardCodedPadding)
    return CGSize(width: itemWidth, height: itemHeight)
}

2 个答案:

答案 0 :(得分:2)

我认为代理未设置,请尝试以下操作:

override func awakeFromNib() {
  super.awakeFromNib()
   print("Hello")
  self.collectionView.delegate = self
  self.collectionView.datasource = self
}

答案 1 :(得分:1)

有三个可能的问题原因:

  1. 如果您设置了tableview和collecionview的委托和数据源。

  2. 以下方法返回的行数可能为零。

    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
    
  3. 如果集合视图在tableview的cel中,那么检查numberOfRows返回的table方法可能为零。

    func numberOfRowsInSection(_ section: Int) -> Int
    
  4. 参考链接:

    https://github.com/DahanHu/DHCollectionTableView