禁止情节板分段执行分段操作



问题如何拒绝故事板片段的发生?

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

我特意提前显示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。

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

最新更新