问题 我如何否认故事板不会发生?
上下文 我有第一个视图控制器上可见的选项的静态分组表视图(如果你愿意,可以使用主菜单)。
我故意尽早展示用户界面,让用户有机会互动并感知快速负载响应。例如,可能导入数据的其他操作发生在后台操作队列中。事实上,我的大多数UI功能都可以在您看到它们时立即使用。
特别是一个菜单项(表格行),在导入某些数据之前尚未就绪(我在所有数据准备就绪时发送通知)。
虽然我可以删除这个动作的故事板segue,但它让我思考如何阻止一个segue被解雇因为某个条件没有得到满足。
我可能会在实践中允许segue,并让目标视图控制器限制初始化,直到它收到它正在等待的通知。
但是,可以拦截一个segue并以编程方式阻止它吗?
答案 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。
我知道很多时间过去了,也许你已经解决了,但它可能会帮助那些面临同样问题的人。