如果不满足条件,Xcode故事板取消推送

时间:2012-01-28 09:39:17

标签: xcode uiviewcontroller uinavigationcontroller push storyboard

我在导航视图控件中有一个带有按钮的故事板,此控件也包含文本字段,它使用故事板segue push。 但是,我有一些输入检查,如果任何文本字段为空,我会提醒用户。

我可以这样做,但它会提醒用户,然后切换到另一个视图。

如果在Pressed方法按钮中未满足if条件,有没有办法取消此push

N.B此推送是由故事板界面创建的,而不是由代码创建的。

3 个答案:

答案 0 :(得分:33)

不要通过从按钮拖动到目标控制器来创建segue。相反,只需从源控制器拖动到目标控制器即可创建segue。单击segue并使用属性检查器指定segue是push并给segue一个标识符(goToDestination)。然后将按钮连接到源视图控制器中的IBAction。在IBAction方法中进行检查,如果要进行推送,请添加以下代码行:

[self performSegueWithIdentifier: @"goToDestination" sender: self];

答案 1 :(得分:28)

以下内容也可以使用,适用于不同类型的段,如推,放等。从故事板中命名segue并使用此处给出的代码。如果您不希望执行特定的segue,则返回NO作为条件,默认返回YES。此方法应位于源视图控制器中。

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    if ([identifier isEqualToString:@"Segue_Name"]) {
        NSLog(@"Segue Blocked");
        //Put your validation code here and return YES or NO as needed
        return NO;
    }

    return YES;
}

答案 2 :(得分:0)

如果buttonAction是必须在按钮单击上执行的方法,则必须在其中调用两个方法 1.检查条件的方法 2.控制segue的方法

 - (IBAction)buttonAction:(id)sender
     {
     [self validateEnteredData];
     [self shouldPerformSegueWithIdentifier:kSegueName sender:sender];
     }

您的验证方法将如下所示

-(void)validateEnteredData
 {
if (self.usernameTextField.text.length==0 && self.passwordTextField.text.length==0)
{
    UIAlertView * alert=[[UIAlertView alloc]initWithTitle:kError message:kInvalidationMessage delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
    [alert show];
    return;
}
else if (![self.usernameTextField.text isEqualToString:@"admin"] && ![self.passwordTextField.text isEqualToString:@"pass"])
{
    UIAlertView * alert=[[UIAlertView alloc]initWithTitle:kError message:kLoginFailed delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
    [alert show];
    return;
}
}

和segue可以通过以下代码段控制

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
if ([identifier isEqualToString:kSegueName])
{
//Validation: Return NO if you don't want to execute the segue action        
    if (self.usernameTextField.text.length==0 && self.passwordTextField.text.length==0)
    {
        return NO;
    }
    else if (![self.usernameTextField.text isEqualToString:@"admin"] && ![self.passwordTextField.text isEqualToString:@"pass"])
    {
        return NO;
    }
 }

  return YES;
}