关于如何在按下集合视图单元格时通过 segue 创建和传递数据的提示



我在UITableViewCell中嵌入了一个UICollectionView,我想在按下UICollectionViewCell时执行一个segue,并将该单元格表示的数据传递给目标ViewController以获取详细信息。

以下是UITableViewCell内嵌入UICollectionView的代码

 @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
    }

当按下UICollectionViewCell时,我如何在主ViewController中执行和准备一个 segue,以便将该单元格包含的数据传递到目标ViewController

以下是您需要执行的步骤。

  1. 正如你所说,你的收藏视图在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绑定,即TableviewCellForRowcell.delegate = self

  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")
    

相关内容

  • 没有找到相关文章

最新更新