一尘不染

iOS 8 Swift-具有嵌入式CollectionView的TableView

swift

我对iOS编程比较陌生,并且尝试了一些尝试但无济于事。

我想在CollectionView里面放一个TableViewCell。我可以单独每个代码,但不知道如何设置和引用每个CollectionViewTableViewCell

我在http://ashfurrow.com/blog/putting-a-uicollectionview-in-a-
uitableviewcell/中找到了本教程,该教程显示了如何在Objective-C中完成此操作,但我一直都在为Obj-C苦苦挣扎。

有谁知道Swift教程或可以提供帮助吗?我正在创建一个简单的项目/代码,我将稍后发布以尝试和帮助。

编辑1

我刚刚找到了上面链接的快速版本。我现在正在解决此问题,但修改AppDelegate似乎过于复杂。

https://github.com/DahanHu/DHCollectionTableView

非常感谢Rob


阅读 263

收藏
2020-07-07

共1个答案

一尘不染

创建一个普通的UITableView并在UITableViewCell中创建UICollectionView。您的collectionView委托和数据源应符合该UITableViewCell。

只是通过这个

在您的ViewController中

// Global Variable
var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

tableView = UITableView(frame: self.view.bounds)
    tableView.delegate = self
    tableView.dataSource = self
    self.view.addSubview(tableView)

    tableView.registerClass(TableViewCell.self, forCellReuseIdentifier: "TableViewCell")
    tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "NormalCell")
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 5
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if indexPath.row == 3 {
        var cell: TableViewCell = tableView.dequeueReusableCellWithIdentifier("TableViewCell", forIndexPath: indexPath) as! TableViewCell
        cell.backgroundColor = UIColor.groupTableViewBackgroundColor()
        return cell

    } else {
        var cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier("NormalCell", forIndexPath: indexPath) as! UITableViewCell
        cell.textLabel?.text = "cell: \(indexPath.row)"

        return cell
    }
}

如您所见,我创建了两个不同的单元格,一个自定义TableViewCell仅在行索引为3时返回,而在其他索引中则返回一个基本UITableViewCell。

自定义“ TableViewCell”将具有我们的UICollectionView。因此,创建一个UITableViewCell子类并写下以下代码。

import UIKit

class TableViewCell: UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegate {

var collectionView: UICollectionView!

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)

    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = UICollectionViewScrollDirection.Horizontal

    collectionView = UICollectionView(frame: self.bounds, collectionViewLayout: layout)
    collectionView.delegate = self
    collectionView.dataSource = self
    collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "CollectionViewCell")
    collectionView.backgroundColor = UIColor.clearColor()

    self.addSubview(collectionView)
}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

// MARK: UICollectionViewDataSource
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
    return 1
}


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

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell: UICollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("CollectionViewCell", forIndexPath: indexPath) as! UICollectionViewCell
    if indexPath.row%2 == 0 {
        cell.backgroundColor = UIColor.redColor()
    } else {
        cell.backgroundColor = UIColor.yellowColor()
    }

    return cell
}
}

希望能帮助到你。

2020-07-07