问题如何拒绝故事板片段的发生?
上下文:我在第一个视图控制器上有一个选项的静态分组表视图,它是可见的(如果你愿意的话,是主菜单)。
我特意提前显示UI,让用户有机会进行交互并感知快速加载响应。例如,可能正在导入数据的其他操作发生在后台操作队列上。事实上,我的大多数UI功能都是现成的,只要你看到它们就可以使用了。
特别是一个菜单项(表行),在导入一些数据之前还没有准备好(当所有数据都准备好时,我会发送通知)。
虽然我可以删除这个动作的故事板片段,但它让我思考如何因为不满足特定条件而禁止片段发射。
我可能会在实践中允许segue,并让目标视图控制器限制初始化,直到它收到它正在等待的通知。
但是,一个人可以通过程序拦截一个segue并停止它吗?
在iOS 6.0及更高版本中,您可以通过重写-[UIWiewController shouldPerformSegueWithIdentifier:sender:]方法并返回NO来防止segue在正常触发它的操作发生后触发。
您可以执行程序分段,而不是使用控制器本身的分段,然后使用performSegueWithIdentifier执行分段,然后您可以测试这个特定的分段并决定是否执行。
您可以按照参考文献中的描述对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
完成后,您可以在故事板中选择现有片段,然后将其样式设置为自定义,并在"属性"检查器中的片段类中输入MYPushNoAnimationSegue。
我知道很多时间过去了,也许你已经解决了,但这可能会帮助其他面临同样问题的人。