1

问题 我如何拒绝故事板转场的发生?

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

我特意提前展示 UI,让用户有机会进行交互并感知快速的加载响应。例如,可能正在导入数据的其他操作发生在后台操作队列上。事实上,我的大部分 UI 功能都可以在您看到它们时立即使用。

但是,特别是一个菜单项(表格行)在导入一些数据之前还没有准备好(当一切准备好时我会发送通知)。

虽然我可以删除这个动作的情节提要转场,但它让我思考如何因为不满足某个条件而阻止转场触发。

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

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

4

3 回答 3

3

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

于 2013-04-26T06:46:07.923 回答
1

你可以做一个程序化的转场,而不是使用控制器本身的转场,然后你使用 performSegueWithIdentifier 进行转场,然后你可以测试这个特定的转场并决定是否这样做。

于 2012-08-23T02:25:51.977 回答
0

您可以将 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,然后将其样式设置为自定义,并在属性检查器中将 MYPushNoAnimationSegue 输入到 Segue 类。

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

于 2013-04-25T12:48:55.487 回答