如何防止两次执行相同的 segue?

How to prevent performing the same segue twice?

我的 iOS 应用程序导航有问题。我有带有 table 菜单项视图的滑动菜单。点击其中一个项目会触发 segue,将新的视图控制器推入堆栈。问题是我可以在同一个堆栈上两次推送同一个视图控制器。如果我 select 菜单项 "A" 然后相应的视图控制器被推送到导航堆栈上。从这个新推送的视图控制器中,我还可以选择 select 相同的 "A" 菜单项,并推送与最顶层视图控制器相同的 class 的新实例。我怎样才能防止这种情况发生?

无效解决方案:
检查导航堆栈顶部控制器的 class。但问题是我只知道 segue 的标识符(NSString* 对象)而无法获取有关目标视图控制器的信息 class。我可以检查 class 的唯一地方是方法:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

但我无法阻止通过这种方法执行 segue。

我试过在 属性 中保存上次执行的 segue 但它不起作用,因为当我按下 "A" 视图控制器,然后按下 "B" 视图控制器,然后按下后退按钮时我将无法再次按 B,这是错误的:)

你需要以下方法

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

只需 return false 即可取消转场。你会得到这样的东西(伪代码):

if ([performedSeguesArray contain:identifier])
{
     return NO;
}
else
{
    [performedSeguesArray addObject:identifier];
}

return YES;

我有同样的问题issue.It现在已经解决了。如果这有帮助,请告诉我。

我已经有一个从 table 视图单元格链接到名称为 DynamicSuperView

的另一个视图的 segue
func tableView(_tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
{
//Remove the below line from this function as it will perform segue.
//performSegue(withIdentifier: "DynamicSegue", sender: self)
}


override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?)         {
// This will actually perform your segue
var DestViewController = segue.destination as! DynamicSuperView 
let selectedRow = tableView.indexPathForSelectedRow?.row
DestViewController.labelText = names[selectedRow!]
}