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

标签 ios objective-c segue uistoryboard uistoryboardsegue

我的 iOS 应用程序中的导航出现问题。我有带有菜单项表格 View 的滑动菜单。点击其中一个项目会触发 segue,它将新的 View Controller 插入堆栈。问题是我可以在同一个堆栈上两次推送同一个 View Controller 。如果我选择菜单项“A”,则将相应的 View Controller 推送到导航堆栈上。从这个新推送的 View Controller 中,我还可以选择相同的“A”菜单项并推送与最顶层 View Controller 相同类的新距离。我怎样才能防止这种情况?

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

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

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

我尝试在属性中保存上次执行的 segue,但它不起作用,因为当我按下“A” View Controller ,然后按下“B” View Controller ,然后按下后退按钮时,我将无法再次按下 B,这是错误的: )

最佳答案

你需要以下方法

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

只需返回 false 即可取消 segue。你会有这样的东西(伪代码):
if ([performedSeguesArray contain:identifier])
{
     return NO;
}
else
{
    [performedSeguesArray addObject:identifier];
}

return YES;

关于ios - 如何防止两次执行相同的segue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32885212/

相关文章:

iphone - 加载某些 View 时如何隐藏 TabBarView?

ios - 了解 RACSignal 错误

swift - 在 prepare for segue 函数中添加两个 guard let

ios - 隐藏 SecItemUpdate 上的 TouchId 弹出窗口

ios - 调用CSSearchableIndex indexSearchableItems时为BAD_ACCESS

ios - 如何检测是否按下了 show (push) segue navigation controller?

objective-c - 在没有 Storyboard或 XIB 的 UIViewController 之间进行 Segue

iOS 从时区获取地点值

ios - 当应用程序处于后台时,CIFilter 无法正常工作

ios - Objective-c 在应用程序启动后有条件地提供 ViewControllers