UIButton触发Segue

时间:2016-03-01 10:07:25

标签: xcode swift uibutton segue

我正在尝试将2个控制器与segue连接在一起。我有一个带有6个按钮的视图控制器,点击按钮后会显示tableviewcontroller。我创建了所有链接,将标识符提供给segue等。

tableviewcontroller中有一个数组应该显示过滤结果,具体取决于触发segue的按钮

我该如何编写prepareforsegue方法?

这就是我正在做的事情

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

    if segue.identifier == "chooseBrand" {

        if sender?.tag == 1 {
            let destinationController = segue.destinationViewController as! SelectionTableViewController
            let numberOfCameras = destinationController.Camera.count 

}

问题是我收到此错误消息

  

"无法转换类型' UINavigationController' (0x10a0ef588)   到' myApp.SelectionTableViewController' (0x108658b90)"

如何根据按下的按钮定义tableviewselectiontableviewcontroller的内容?

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:2)

发件人到底是什么人?错误是说tag = 1的sender不是SelectionTableViewController。

无论如何,你可以做的只是将每个按钮连接到相同的动作插座方法,并在两个控制器之间有一个通用的segue。然后,当您按下按钮A,B,C,D,E或F时,只需检查它们的tag(或将它们存储为控制器类中的变量),并将您想要的任何内容发送给控制器。重要的是控制器之间的segue位于两个控制器之间,而不是另一个控制器的每个segue UIButton。在下面的示例中,我假设您将六个UIButton中的每一个存储为类变量。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "segueFromFirstToSecond" {
        let destinationController = segue.destinationViewController as!   SelectionTableViewController
        if sender = button1 {
            let numberOfCameras = destinationController.Camera.count
        } else if sender == button2 {
            let numberOfCameras = destinationController.Camera.count
        }          
}

@IBAction func buttonPressed(sender: AnyObject) {
    performSegueWithIdentifier(segueProfileToPul, sender: sender)
}

将所有按钮连接到buttonPressed()。我不认为这行let numberOfCameras = destinationController.Camera.count有效,因为SelectionTableViewController尚未实例化,因此其变量中没有值(我认为)。您正在寻找的可能是设置此值destinationController.Camera.count = someValue。也许我错了。

修改 我上传了一个显示我的意思的测试项目。注意我在故事板中所建立的联系。下载here