我正在尝试使用segue在视图控制器之间进行转换。它正确导航但运行了两次。
这是我的代码:
- (IBAction)onActionNext:(id)sender {
if ([[nameField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]isEqualToString:@""]) {
}else if([[emailField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] isEqualToString:@""]){
}else if([[mobileField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] isEqualToString:@""]){
}else{
[self performSegueWithIdentifier:@"VerifyNext" sender:sender];
}
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([[segue identifier] isEqualToString:@"VerifyNext"]) {
// Get destination view
OTPSceneViewController *vc = [segue destinationViewController];
[vc setTitle:@"myapp"];
}
}
答案 0 :(得分:9)
即使在评论此行之后,segue仍然运行,因为@mikealter说segue已经连接了你的按钮。检查您何时检查何时单击segue 突出显示。
按钮如:
或视图控制器,如:
如果您遇到第一种情况,这意味着您的segue已连接到按钮,这就是即使您对代码进行评论也会打开下一页的原因。保留代码时有2次(一个来自故事板,另一个来自代码)。
修改强> 如果您只想从代码中调用下一页。删除Segue。然后将其与视图控制器重新连接,如:
答案 1 :(得分:2)
首先,每当您创建一个segue(i.example)从按钮到视图控制器时,您将创建VC1和VC2之间的链接。
如果您运行项目,您将看到segue可以从一个VC导航到另一个VC。
这意味着它已经执行 segue,因此如果您为按钮声明了一个ACTION并调用 - 执行segue ... - 它将运行两次。
注意:如果您调用 performSegueWithIdentifier ,可能是因为您想通过SENDER传递一些数据。在这种情况下,您(显然)需要调用segue ONCE,因此不是从按钮创建segue到下一个VC,(首先删除该segue),创建一个新的从VCOrigin到VCDestination - >有很多方法可以做到这一点,但是从Interface Builder就像在顶部黄色圆角图标上的右键单击一样简单,然后拖放到destinationVC上。别忘了在Attributes Inspector上设置标识符。 现在,在你的按钮~Action中调用performSegueWithIdentifier并传递数据。
答案 2 :(得分:0)
如果你停止故事板segue使用以下方法:
override func shouldPerformSegueWithIdentifier(identifier: String,sender: AnyObject?) -> Bool {
return false
}
答案 3 :(得分:0)
看看这个question这可能肯定会纠正
或者还有另一种方法可以使用下面的代码导航到另一个视图控制器。
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"viewControllerName"];
[self.navigationController pushViewController:vc animated:YES];
确保使用身份检查器为视图控制器提供标识。请参阅图像。
答案 4 :(得分:0)
你甚至没有添加
PetOwner
如果在故事板中添加segue,则在onActionNext方法中
如果要导航到下一个视图控制器,请使用上面一行。
为争论做准备
使用将信息从一个视图控制器传递到另一个视图控制器 我们需要利用的UIStoryboardSegue对象 当前视图控制器的prepareForSegue:sender:方法。
但是如果你同时调用它们,它会调用两次。所以确保你是想将信息或数据传递给下一个视图控制器还是只是导航视图。
[self performSegueWithIdentifier:@"VerifyNext" sender:sender];