我是故事板和xcode的新手(使用4.6) 我使用导航故事板与push 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];
}
}
当我调试代码时 - 我发现它始终属于其他情况,但是segue(转换到新视图)仍然会发生。
如何阻止用户转移到新视图?
答案 0 :(得分:3)
有两种方法可以实现条件segues。
1)从ViewController将Segues配置为'manual',并在您的IBAction方法中有条件地调用performSegueWithIdentifier
,您可以连接到按钮的事件处理。
或2)从你的按钮将Segue配置为'Triggered Segue'并在视图控制器中实现- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
以执行条件逻辑。
答案 1 :(得分:1)
你是说你只想在条件成立的情况下执行segue吗?
如果是这样,不是直接从控件或表格单元创建segue,而是创建无触发segue。无触发segue以视图控制器为源,并且不会自动触发。相反,您可以随时以编程方式触发它,包括来自IBAction。
要创建无触发segue,请从场景底部的场景底座中的包含视图控制器图标开始控制+拖动segue。像往常一样拖动到目标场景,然后选择segue类型。选择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.