UITableview中的UICollectionView - 获取tapped UICollectionView的标记

时间:2016-09-07 06:03:23

标签: ios swift uitableview uicollectionview

我在UICollectionView添加了UITableView。现在,我想确定用户点击哪个单元格以及UICollectionView的索引路径。

我得到了正确的indexPath但是无法获得他点击的UICollectionView的标签。我正在做这样的事情来点击

    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    print("\(collectionView.tag) ---- \(indexPath.item) ")
}

整码

class UserLibraryViewController: UIViewController {

extension UserLibraryViewController : UITableViewDelegate { }

extension UserLibraryViewController : UITableViewDataSource {

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return myBooksGenre[section]
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return myBooksGenre.count
}

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("userBooksTableViewCell") as! UserLibraryTableViewCell
    return cell
}
}

TableViewCell

class UserLibraryTableViewCell: UITableViewCell {
@IBOutlet weak var collectionView: UICollectionView!
}

extension UserLibraryTableViewCell : UICollectionViewDataSource {

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

    return 12
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("userBooksCollectionViewCell", forIndexPath: indexPath) as! UserLibraryCollectionViewCell



    return cell
}

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {

    print("\(collectionView.tag) ---- \(indexPath.item) ")


}
}

extension UserLibraryTableViewCell : UICollectionViewDelegateFlowLayout {

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

}

2 个答案:

答案 0 :(得分:2)

您在tableView中有多个部分,因此您可以在NSIndexPath中创建一个UserLibraryTableViewCell个实例,并在cellForRowAtIndexPath中对此进行初始化。

class UserLibraryTableViewCell: UITableViewCell {

    var tableIndexPath: NSIndexPath?

}

现在将tableIndexPath设置为cellForRowAtIndexPath

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("userBooksTableViewCell") as! UserLibraryTableViewCell
    cell.tableIndexPath = indexPath
    return cell
}

现在didSelectItemAtIndexPath collectionView访问tableIndexPath就像这样。

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {

     print("\(self.tableIndexPath) ---- \(indexPath.item) ")
}

答案 1 :(得分:0)

试试这个:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("userBooksTableViewCell") as! UserLibraryTableViewCell
    cell.collectionView.tag = indexpath.row
    return cell
}


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

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return myBooksGenre.count
}

您没有为表视图的Tag中的特定单元格设置集合视图的cellForRowAtIndexPath

更新代码。

同样符合UICollectionViewDelegate协议:

extension UserLibraryTableViewCell : UICollectionViewDataSource, UICollectionViewDelegate