我有一个从一个屏幕映射到下一个屏幕的 segue。第一个屏幕总是转到第二页。但是我想确保如果执行了某些代码(例如验证检查正常),segue 只会进入第二页。这样可以设置吗?
谢谢!
-(IBAction)add:(id)sender {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_sync(dispatch_get_main_queue(), ^{
[[CMPopupManager sharedObject] showWaitingPopup];
});
sleep(3);
dispatch_sync(dispatch_get_main_queue(), ^{
[[CMPopupManager sharedObject] closeWaitingPopup];
[self performSegueWithIdentifier:@"addCarSegue" sender:self];
});
});
}
(并且使用 Storyboard 不是从您的按钮而是从视图控制器拖动一个 segue 动作)
只有在某个 BOOL 为 YES 的情况下,你才能让你继续进行转换。有一个全局变量(根据您的需要,可能是全局的,可能只是在那个范围内。取决于您的来源)BOOL 变量,初始化为 NO。一旦验证OK,将其更改为YES。
将调用下一个视图控制器的函数使用(不记得确切的格式)嵌套在一个if(verificationOK) { }
这样,即使到达该代码,它也不会进入 if 语句,除非 verifyOK 变量已更改为 YES。
编辑
阅读您的评论后,您可以简单地以编程方式触发 segue。将您的 IBAction 连接到一个函数,比方说changeView
-(IBAction) changeView:(id) sender {
if(verificationOk) {
[self performSegueWithIdentifier:@"SeguesIdentifier" sender:nil];
}
}
您可以在此处阅读有关 segue的更多信息
就个人而言,我建议确保禁用该按钮,直到字段以通过验证规则的方式进行更改。因此,随着这些字段的变化,执行验证,一旦满足验证规则就启用 segue 按钮。
如果您的验证很复杂(例如,需要一些服务器往返),则从按钮中删除 segue,将您的按钮连接到IBOutlet
验证的地方,并在成功后转换/切换到下一个场景。