segue从CollectionView中移动了选择Swift 3

时间:2018-06-14 12:23:42

标签: ios swift uitableview uicollectionview

在我的代码中

....
class MenuTableViewCell: UITableViewCell {
..
..///some code here
..
}

extension MenuTableViewCell : UICollectionViewDataSource, UICollectionViewDelegate{
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return menuItems.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "menuItemCell", for: indexPath) as! MenuItemViewCell
    cell.menuItemName = menuItems[indexPath.row]

    return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let iconImage  = menuItems[indexPath.row]
    print("iconImage === ",iconImage,section)
    print("Collection view at row \(section) selected index path \(indexPath.row)")

    if (section == 0){
        if(indexPath.row==0) {
            print("inside 0 0")
                 performSegue(withIdentifier: "home", sender: nil)
        }
    }
  }
}

但它显示错误

使用未解析的标识符'performSegue'

我该怎么做......

1 个答案:

答案 0 :(得分:1)

表格视图单元格没有performSegue的方法。您需要将消息转发到某个视图控制器,或者使视图控制器成为集合视图的数据源。

由于您可能有多个具有集合视图的单元格,我建议您使用第一个解决方案(转发消息以查看控制器)。

所以只需创建一个委托:

protocol MenuTableViewCellDelegate: class {
    func menuTableViewCellShouldNavigateHome(_ sender: MenuTableViewCell)
}

在您的单元格中添加一个属性。确保它很弱:

class MenuTableViewCell: UITableViewCell {
..
    weak var delegate: MenuTableViewCellDelegate?

并在集合视图委托中调用它:

if(indexPath.row==0) {
    print("inside 0 0")
    delegate?.menuTableViewCellShouldNavigateHome(self)
}

现在在您的表视图数据源(我希望是一个视图控制器)中找到索引路径中行的方法单元格,您可以在其中创建单元格并将self设置为委托

cell.delegate = self
return cell

并实施协议

extension MyViewController: MenuTableViewCellDelegate {
    func menuTableViewCellShouldNavigateHome(_ sender: MenuTableViewCell) {
        performSegue(withIdentifier: "home", sender: nil)
    }
}