UITableViewCell持有UICollectionView并单击集合单元格segue

时间:2018-04-04 13:14:54

标签: ios swift uitableview uicollectionview segue

我正在使用Swift3和Xcode 8.3.3
我正在使用UITableViewCell,它包含UICollectionView。 每个CollectionView单元都需要执行segue。 我的意思是,我需要使用导航控制器调用其他ViewController。因此用户可以返回Main UITableViewController。

import UIKit

class PastCell: UITableViewCell {

    @IBOutlet weak var ptripDtls: UICollectionView!

    var logcount:Int = 0
    override func awakeFromNib() {
        super.awakeFromNib()

        ptripDtls.delegate = self
        ptripDtls.dataSource = self
        logcount = Transfer.tripObj[Transfer.cellpos]["logcount"]! as! Int

        let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
        let width = self.ptripDtls.collectionViewLayout.collectionViewContentSize.width;
        layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
        layout.itemSize = CGSize(width: width-17 , height: 50)
        layout.minimumInteritemSpacing = 0
        layout.minimumLineSpacing = 1
        ptripDtls!.collectionViewLayout = layout
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }

}

extension PastCell: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {


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

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

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PastTripCollectionCell", for: indexPath) as! PastTripCollectionCell
        return cell
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        //Might be here segue function will call
    }

}

2 个答案:

答案 0 :(得分:1)

您实际上有多种选择:

封闭

当你将tableView单元格出列时,在UITableViewCell之内传递一个闭包,如tapped: (Model) -> Void,并在该闭包内指定执行segue。 (如果你的所有收集单元格都执行相同的segue,它会起作用,如果应该调用不同的segue,你可以使用这种机制来传播你的回调)

代表

定义一个自定义委托,通知你的viewController有关CollectoinView的DidSelectItem方法,然后相应地执行Segue。

通知

在整个系统中触发通知,只有您的ViewController会侦听该通知,并相应地执行您的segue。 (这实际上不是一个好的解决方案,只是指出它是可能的)

答案 1 :(得分:0)

对于swift 4如果使用segue,请在didSelectRowAtIndexPath中执行segue

self.performSegue(withIdentifier: "YourSegueIdentifier", sender: nil)

如果您只使用导航控制器,请使用Push。

let vc = self.storyboard?.instantiateViewController(withIdentifier: "YourVCIdentifier") as! YourVC

self.navigationController?.pushViewController(vc, animated: true)