在动态tableView,swift的tableViewCell中,从动态collectionViewCell执行Segue With Identifier

时间:2016-05-11 23:44:16

标签: swift uitableview uicollectionview segue

我有一个动态tableView,一个tableViewCell中的动态collectionView。

在每个collectionViewCell中,都有一个按钮,它应该是segue的触发器。

我尝试使用以下代码,但应用程序崩溃:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<Okm.bienController: 0x7fc8b0cfb1a0>) has no segue with identifier 'extend''

我的storyBoard中的segue标识符是'extend'。

 class photoCell: UITableViewCell, UICollectionViewDelegateFlowLayout, UICollectionViewDelegate, UICollectionViewDataSource {
    ...

    func extendFunc(sender : UIButton) {

       bienController().performSegueWithIdentifier("extend", sender: sender.tag)
    }
}


class bienController : UIViewController, UITableViewDelegate, UITableViewDataSource {

...

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "extend" {
            let backItem = UIBarButtonItem()
            backItem.title = ""
            navigationItem.backBarButtonItem = backItem

            let extendView = segue.destinationViewController as! extendController
            extendView.image = image[sender]

        }
    }
}

你知道我怎么做吗?

谢谢!!!

修改

enter image description here

术语bienController().performSegueWithIdentifier(...)是否正确?我可以从UICollectionCell调用我的Controller函数吗?

修改

我试过了:

 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        if tableView == self.tableViewTwo {
            self.segue()
          // self.performSegueWithIdentifier("image", sender: nil)
        }
    }

    func clickExtend(sender:Int){
        print(sender) //print the correct tag!
       self.segue()
    }

    func segue(){
         self.performSegueWithIdentifier("image", sender: nil)
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        if segue.identifier == "image" {
            let backItem = UIBarButtonItem()
            backItem.title = ""
            navigationItem.backBarButtonItem = backItem
           // print(sender)

           let extendView = segue.destinationViewController as! extendController
           extendView.image = UIImage(named: "maison")

        }
    }
}

我将函数clickExtend()与我的collectionCell的按钮相关联。 当segse来自didSelectRowAtIndexPath时,segue工作,但是当我点击按钮时,它会崩溃并出现同样的错误:'由于未捕获的异常而终止应用'NSInvalidArgumentException',原因:'Receiver()没有带有标识符'image'的segue' “

我不明白..

(我更改了'image'的segue标识符)

4 个答案:

答案 0 :(得分:1)

检查segue是否来自单元格或viewController。也许就是这样。

答案 1 :(得分:0)

看起来标识符未正确连接或未设置为“extend”,因为错误消息显示(没有标识符'extend'的segue)

答案 2 :(得分:0)

像费尔南多·卡尼说的那样

尝试更改bienController().performSegueWithIdentifier("name")

self.performSegueWithIdentifier("name")

答案 3 :(得分:0)

你必须使用代表。之前我遇到过这个问题,我使用协议和委托解决它并执行带标识符的segue。