我正在努力完成一些看起来很简单的事情:我有一个带有动态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,尽管有代码。
答案 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-到视图控制器。