禁止故事板Segue执行segue行动

时间:2012-08-23 01:04:08

标签: uistoryboard segue uistoryboardsegue

问题 我如何否认故事板不会发生?

上下文 我有第一个视图控制器上可见的选项的静态分组表视图(如果你愿意,可以使用主菜单)。

我故意尽早展示用户界面,让用户有机会互动并感知快速负载响应。例如,可能导入数据的其他操作发生在后台操作队列中。事实上,我的大多数UI功能都可以在您看到它们时立即使用。

特别是一个菜单项(表格行),在导入某些数据之前尚未就绪(我在所有数据准备就绪时发送通知)。

虽然我可以删除这个动作的故事板segue,但它让我思考如何阻止一个segue被解雇因为某个条件没有得到满足。

我可能会在实践中允许segue,并让目标视图控制器限制初始化,直到它收到它正在等待的通知。

但是,可以拦截一个segue并以编程方式阻止它吗?

3 个答案:

答案 0 :(得分:3)

在iOS 6.0及更高版本中,您可以通过覆盖 - [UIViewController shouldPerformSegueWithIdentifier:sender:]方法并返回NO来阻止segue在通常触发它的操作之后触发。

答案 1 :(得分:1)

您可以执行一个程序设计,而不是使用控制器本身的segue,然后使用performSegueWithIdentifier执行segue,然后您可以测试这个特定的segue并决定是否这样做。

答案 2 :(得分:0)

您可以按照reference

中的描述继承UIStoryboardSegue

可能的实施:

·H

@interface MYPushNoAnimationSegue : UIStoryboardSegue
@end

的.m

#import "MYPushNoAnimationSegue.h"

@implementation MYPushNoAnimationSegue

- (void)perform {
    if (condition) {
        [[(UIViewController *)self.sourceViewController navigationController] pushViewController:self.destinationViewController animated:NO];
    }
}

@end

完成后,您可以在故事板中选择现有的segue,然后将其样式设置为custom,并在Attributes检查器中输入MYPushNoAnimationSegue到Segue Class。

我知道很多时间过去了,也许你已经解决了,但它可能会帮助那些面临同样问题的人。