我有一个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
答案 0 :(得分: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
}
}
在func didSelectItem(At indexPath: IndexPath)
方法中,编写以下代码
self.parentViewController?.performSegue(withIdentifier: "Identifer", sender: "Your Data in place of this string")
答案 1 :(得分:1)
这是您需要执行的步骤。
正如您所说,您的CollectionView位于TableView
内部。因此,您的TableView委托/数据源已与MainViewController绑定。 CollectionView
与TableViewCell
绑定的代表/数据源。
现在创建一个协议来知道用户已经点击了collectionView
。
protocol MyProtocol : class {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
}
在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)
}
}
}
现在您的MainViewController
必须符合此协议,
class MainViewController :UIViewController, MyProtocol {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
// Do segue here ....
}
}
注意:请确保将委托与您的MainViewController
绑定,即TableviewCellForRow
中的cell.delegate = self