情节提要:导航的条件转场(推送)

Posted

技术标签:

【中文标题】情节提要:导航的条件转场(推送)【英文标题】:Storyboard: Condition segue transition for navigation (push) 【发布时间】:2013-05-21 09:43:56 【问题描述】:

我是故事板和 xcode 的新手(使用 4.6) 我正在使用带有推送序列的导航故事板。 我想实现一个选择快照视图,如果选择了至少 1 个快照 - segue 将起作用。否则,用户应该停留在同一个视图上。

我创建了 2 个 UIView:SelectSnapsViewController 和 ShippingDetailViewController。

在 SelectSnapsViewController.m 中我添加了以下内容:

- (IBAction)nextButtonPressed:(id)sender

    looseDataAlert = NO;
    [okkkBtn setFrame:CGRectMake(116, 272, 72, 37)];
    if ([appDelegate.selImageDetails count] == 0)
    
        label1.text = @"To proceed you need to add snaps.";
        [self openAlertView];
    
    else
        [self performSegueWithIdentifier:@"MySegue" sender:self];
    

当我调试代码时 - 我发现它总是在 else 条件下,但是 segue(转换到新视图)仍然发生。

如何防止用户被转移到新视图?

【问题讨论】:

您需要将 Segue 设置为 SelectSnapsViewController 中的“手动”segue,而不是按钮触发的 segue。 本教程appcoda.com/… 可能会对您有所帮助。 @MikePollard:你能逐步解释一下吗? 【参考方案1】:

有两种方法可以实现条件转场。

1) 从 ViewController 将 Segue 配置为“手动”,并在连接到按钮事件处理的 IBAction 方法中有条件地调用 performSegueWithIdentifier

或 2) 从您的按钮将 Segue 配置为“触发的 Segue”,并在您的视图控制器中实现 - (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 以执行条件逻辑。

【讨论】:

嘿迈克...你能解释一下吗? 嘿,我得到了答案:- 不要通过从按钮拖动到目标控制器来创建 segue。相反,只需从源控制器拖动到目标控制器即可创建一个 segue。单击 segue 并使用属性检查器指定 segue 是推送并给 segue 一个标识符(goToDestination)。然后将按钮连接到源视图控制器中的 IBAction。在 IBAction 方法中进行检查,如果要进行推送,请添加以下代码行: [self performSegueWithIdentifier: @"goToDestination" sender: self]; OR 2) 从您的按钮将 Segue 配置为“触发的 Segue”并在您的视图控制器中实施 - (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 以执行条件逻辑。 *** 选项效果很好。【参考方案2】:

你是说你只想在条件为真时执行转场?

如果是这样,不要直接从控件或表格单元格创建转场,而是创建无触发器转场。无触发器的 segue 以视图控制器为源,它永远不会自动触发。相反,您可以随时以编程方式触发它,包括通过 IBAction。

要创建无触发转场,请从场景底部场景停靠栏中的包含视图控制器图标开始控制并拖动转场。像往常一样拖动到目标场景,然后选择转场类型。选择 segue,然后在检查器中选择一个 segue 标识符。

在运行时,当您想要执行 segue 时,调用 -[UIViewController performSegueWithIdentifier:sender:]。您可以为发件人传递您想要的任何对象,包括 nil。如果发件人对你没用,就传nil。

所以,总结一下:

Create a triggerless segue from the view controller to the destination scene
Set an identifier for the segue in the inspector
At runtime, and form code, call -[UIViewController performSegueWithIdentifier:sender:] when you want to trigger the segue.

【讨论】:

以上是关于情节提要:导航的条件转场(推送)的主要内容,如果未能解决你的问题,请参考以下文章

无动画推送 segue

CollectionView 单元格转场

是否可以在情节提要中定义“通用”展开转场?

如何使用情节提要从 UIBarButtonItem 触发转场?

如何使用情节提要从自定义 uitableviewcell 正确启动弹出框转场

自定义 segue 到导航控制器层次结构中的特定子视图