Мне нужно выполнить переход к контроллеру представления по щелчку ячейки (содержит только метку) в представлении коллекции. Я пытался использовать:
collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
а также:
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
но ни один из них не работает, что означает, что их не вызывают. В ячейке было включено взаимодействие с пользователем, а также включена поддержка нескольких касаний. Пожалуйста, дайте мне знать, как это исправить.
Я использую Swift 4.1 и Xcode 9.4.1.
Код:
class MyCasesViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource{
var MyCases : [[String]] = [[]]
var textPassedOver : String?
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
label.text = textPassedOver
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Register cell classes
//self.collectionView!.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: UICollectionViewDataSource
func numberOfSections(in collectionView: UICollectionView) -> Int {
// #warning Incomplete implementation, return the number of sections
return MyCases.count
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of items
return MyCases[0].count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
collectionView.delegate = self
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! CustomViewCell
// Configure the cell
cell.label.text = MyCases[indexPath.section][indexPath.item]
if(indexPath.section == 0){
cell.label.font = UIFont(name: "bold", size: 6)
}else{
cell.label.font = UIFont(name: "HelveticaNeue", size: 14)
}
//cell.isSelected = true
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
performSegue(withIdentifier: "CaseDetails", sender: self )
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
print(segue.identifier)
if(segue.identifier == "CaseDetails"){
let destinationVC = segue.destination as! CaseDetailViewController
//CaseDetailViewController.delegate = self
destinationVC.textPassedOver = "pass this text"
}
}
// func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
// collectionView.allowsSelection = true
// print("is it here")
// if(indexPath.section == 1 ){
// print("Hurray")
// let viewController = UIViewController()
// self.navigationController?.pushViewController(viewController, animated: true)
// }
// }
// func collectionView(_ collectionView: UICollectionView, didSelectItemAtIndexpath indexpath: IndexPath){
// print("is it here now")
// print(indexpath.section)
// print(indexpath.item)
// }
//
// override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// if(segue.identifier == "CaseDetails" ){
// let cell = sender as! CustomViewCell
// var destination = segue.destination as! CaseDetailViewController
// destination.flag = "Hurray"
// }
// }
// Uncomment this method to specify if the specified item should be selected
func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
return true
}
}