我在导航视图控件中有一个带按钮的序列图像板,这个控件中也有文本字段,它使用序列图像板segue push
。但是,我进行了一些输入检查,如果有任何文本字段为空,我会提醒用户。
我可以这样做,但它会提醒用户,然后切换到另一个视图。
如果按钮按下的方法中不满足if条件,有没有办法取消这个push
?
注意:此推送是由故事板接口创建的,而不是由代码创建的。
发布于 2013-09-22 13:00:40
下面的代码也可以用于不同类型的segues,如推、展开等。从故事板中命名段,并使用此处给出的代码。如果不希望执行特定的段,则为该条件返回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;
}
发布于 2012-01-28 23:18:54
不要通过从按钮拖动到目标控制器来创建分段。相反,只需从源控制器拖动到目标控制器即可创建一个段。单击分段并使用属性检查器指定分段为推,并为分段指定标识符(goToDestination)。然后将该按钮连接到源代码视图控制器中的IBAction。在IBAction方法中执行检查,如果您想执行推送,请添加以下代码行:
[self performSegueWithIdentifier: @"goToDestination" sender: self];
发布于 2015-11-19 15:04:40
如果buttonAction是必须在单击按钮时执行的方法,则必须调用它内部的两个方法1.检查条件的方法2.控制段的方法
- (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;
}
https://stackoverflow.com/questions/9044265
复制相似问题