Я хочу передать данные через segue в пункт назначения ViewController
, когда UICollectionViewCell
нажата с использованием протокола cellWasPressed()
.
UICollectionView
встроен в UITableViewCell
, что делает его делегатом для представления коллекции.
Я попробовал следующий код, чтобы заставить его выполнить задачу, но, к сожалению, данные события не передаются через segue, поэтому назначение ViewController
пусто.
Вот код делегата, найденный в UITableViewCell
:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
selectedIndex = indexPath
selectedIndex2 = self.indexPath
print(selectedIndex)
print(selectedIndex2)
delegate?.cellWasPressed()
}
protocol CellDelegate {
func cellWasPressed()
}
extension UIResponder {
func next<T: UIResponder>(_ type: T.Type) -> T? {
return next as? T ?? next?.next(type)
}
}
extension UITableViewCell {
var TableView: UITableView? {
return next(UITableView.self)
}
var indexPath: IndexPath? {
return TableView?.indexPath(for: self)
}
}
и вот код для подготовки к переходу в BrowseViewController
:
func cellWasPressed() {
if let index = selectedIndex{
self.performSegue(withIdentifier: "ViewEventDetails", sender: index)
}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if(segue.identifier == "ViewEventDetails") {
let destination = segue.destination as? EventDetailViewController
if let index = sender as? IndexPath {
if let index2 = selectedIndex2 {
let cell = EventTable.cellForRow(at: index2) as! PopularCell
let events = groupedEventArray[index2.row].1
let eventToPass = events[index.row]
destination?.navigationItem.title = eventToPass.event_name
}
}
}
}
Я хочу исправить этот код в другом, чтобы он передавал данные события в пункт назначения ViewController
через segue.