2

我是故事板和 xcode 的新手(使用 4.6)我正在使用带有推送 segue 的导航故事板。我想实现一个选择快照视图,如果选择了至少 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(转换到新视图)仍然发生。

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

4

2 回答 2

3

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

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

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

于 2013-05-21T09:54:08.253 回答
1

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

如果是这样,请不要直接从控件或表格单元格创建转场,而是创建无触发器转场。无触发器的 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.
于 2015-05-12T05:07:59.930 回答