表视图单元格内部的集合视图单元格的索引路径

时间:2017-10-02 22:46:32

标签: swift uitableview uicollectionview indexpath

我有一个嵌套在表格视图单元格内的UICollectionView。如何获取collectionview单元格的水平行的索引路径?我试着用

        let index = cell.tag

        print(index as Any) 

打印选择哪个索引,不知道无论我选择哪个单元格,它都会打印零值。我很抱歉我对收藏视图没有经验。任何帮助深表感谢。感谢。

2 个答案:

答案 0 :(得分:0)

您应该设计一个处理嵌套UIElement交互的协议。它使您的头脑更清晰,并分配更好的地址

class ViewwithTable:UIViewController,UITableViewDataSource,collectionCell_delegate{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "temp", for: indexPath) as! NestedViewwithCollection
        cell.delegate = self
        return cell
    }

    func didPressed(indexPath: IndexPath) {
        //the pressed index!
    }
}

class NestedViewwithCollection:UITableViewCell,UICollectionViewDataSource,UICollectionViewDelegate{
    var delegate:collectionCell_delegate?

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        return UICollectionViewCell()
    }

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

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        if let del = delegate{
            del.didPressed(indexPath: indexPath)
        }
    }

}

protocol collectionCell_delegate {
    func didPressed(indexPath:IndexPath)
}

答案 1 :(得分:0)

将此代码用于tableView

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

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
    return cell
}

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) 
{
    guard let tableViewCell = cell as? TableViewCell else { return }
    tableViewCell.setCollectionViewDataSourceDelegate(self, forRow: indexPath.row)
}

收藏视图

extension ViewController: UICollectionViewDelegate,UICollectionViewDataSource 
{
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return model[collectionView.tag].count
}

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

    cell.backgroundColor = model[collectionView.tag][indexPath.item]

    return cell
}