动态UITableView中的动态segue似乎不可能

时间:2015-06-17 10:01:34

标签: ios swift uitableview uiviewcontroller

我正在努力完成一些看起来很简单的事情:我有一个带有动态UITableViewCells的UITableView。选择每个单元格后,我想在Storyboard中对不同的视图控制器执行segue。但是,我想以编程方式创建segues,因为我想确定在运行时调用哪个ViewController。但是,我似乎无法让它发挥作用。

以下是我为单元格选择设置代码的方法:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if(indexPath.row==0){

        var calculoViewController = CalculoViewController()
        var calcSegue = UIStoryboardSegue(identifier:"Menu_Calc", source: self, destination: calculoViewController)

        self.performSegueWithIdentifier("Menu_Calc", sender: self)
    }
    else
    {
        var deducVC = DeductionsViewController()
        var deducSegue = UIStoryboardSegue(identifier: "Menu_Deduc", source: self, destination: deducVC)
        self.performSegueWithIdentifier("Menu_Deduc", sender: self)
    }
}

然而,这失败了:     NSInvalidArgumentException',原因:'Receiver()没有标识符'Menu_Calc'的segue''

请注意,我的Storyboard中没有任何绘制的segue,这就是我动态创建它们的原因。以前我尝试通过将原型单元与ViewControllers连接来绘制它们,但是然后每个单元都调用相同的segue,尽管有代码。

2 个答案:

答案 0 :(得分:0)

执行刚刚创建的segue的正确方法是

var calcSegue = UIStoryboardSegue(identifier:"Menu_Calc", source: self, destination: calculoViewController)
calcSegue.perform()

如果要使用故事板创建segues但不要在行选择上调用,则可以在2个视图控制器(不是原型单元和VC)之间创建一个segue,并为它们提供标识符。然后在didSelectRow方法中,使用正确的标识符执行segue。

答案 1 :(得分:0)

哇,这是2018年中,问题仍然缺乏有效答案!我希望有人可以提供有效答案。我有两个以上的动态单元,也有两个以上的序列化视图控制器。

但是,对于Tutiplain的简单情况-只有一个if-else,我建议在else块中使用正常的可重用细胞的序列。对于他的情况下的第一行,请使用shouldPerformSegue(withIdentifier:sender :)防止它正常进行隔离;然后使用performSegue(withIdentifier:sender :)手动执行一个特殊的segue,由ctrl拖动在故事板上设置为从seguing的控制器图标-从视图控制器到segueing-到视图控制器。