提示如何在按下collectionview单元格时通过segue创建和传递数据

时间:2019-07-15 11:32:24

标签: ios swift uitableview uicollectionview

我有一个UICollectionView嵌入在UITableViewCell中,并且我想在按下UICollectionViewCell时执行隔离并将该单元格表示的数据传递到目标{{1} }以获取详细信息。

这是ViewController内的嵌入式UICollectionView的代码

UITableViewCell

当按下 @IBOutlet weak var EventCollection: UICollectionView! var events = [Events]() override func awakeFromNib() { super.awakeFromNib() EventCollection.delegate = self EventCollection.dataSource = self } extension PopularCell: UICollectionViewDelegate, UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return events.count } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = EventCollection.dequeueReusableCell(withReuseIdentifier: "EventCell", for: indexPath) as! EventCell let event = events[indexPath.row] print("Event Name:\(event.event_name)") cell.event = event cell.tag = indexPath.row return cell } 时如何在主ViewController中执行和准备序列,以便将该单元格包含的数据传递到目的地UICollectionViewCell

2 个答案:

答案 0 :(得分:1)

  1. 在名为UIView_Ext的新文件中添加以下代码

    extension UIView {
        var parentViewController: UIViewController? {
            var parentResponder: UIResponder? = self
            while parentResponder != nil {
                parentResponder = parentResponder!.next
                if let viewController = parentResponder as? UIViewController {
                    return viewController
                }
            }
            return nil
        }
    }
    
  2. func didSelectItem(At indexPath: IndexPath)方法中,编写以下代码

    self.parentViewController?.performSegue(withIdentifier: "Identifer", sender: "Your Data in place of this string")
    

答案 1 :(得分:1)

这是您需要执行的步骤。

  1. 正如您所说,您的CollectionView位于TableView内部。因此,您的TableView委托/数据源已与MainViewController绑定。 CollectionViewTableViewCell绑定的代表/数据源。

  2. 现在创建一个协议来知道用户已经点击了collectionView

    protocol MyProtocol : class {
        func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
    }
    
  3. TableViewCell中,您需要像这样调用委托,

    class MyTableCell : UITableViewCell, UICollectionViewDelegate {
        weak var delegate : MyProtocol?
    
        :
        :
    
        func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
            if let delegate = delegate {
                delegate.collectionView(collectionView, didSelectItemAt: indexPath)
            }
        }
    }
    
  4. 现在您的MainViewController必须符合此协议,

    class MainViewController :UIViewController, MyProtocol {
        func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
            // Do segue here ....
        }
    }
    

注意:请确保将委托与您的MainViewController绑定,即TableviewCellForRow中的cell.delegate = self