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

时间:2015-10-01 10:26:35

标签: ios objective-c segue uistoryboard uistoryboardsegue

我的iOS应用中的导航问题。我有滑动菜单,菜单项的表格视图。点击其中一个项目激活segue,将新视图控制器推入堆栈。问题是我可以在同一个堆栈上将同一个视图控制器推送两次。如果我选择菜单项" A"然后在导航堆栈上推送相应的视图控制器。从这个新推的视图控制器我也可以选择相同的" A"菜单项和推送与最顶层视图控制器相同的新类别。我怎么能防止这种情况?

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

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

但我不能阻止从这种方法中执行segue。

我已经尝试将最后执行的segue保存在财产中,但它不会起作用,因为当我推动" A"查看控制器,然后" B"查看控制器,然后按下后退按钮我再也无法再次按B,这是错误的:)

2 个答案:

答案 0 :(得分:2)

您需要以下方法

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

只返回false取消segue。你会有这样的东西(伪代码):

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

return YES;

答案 1 :(得分:1)

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

我已经有一个从表格视图单元格链接到名为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!]
}