2012-08-08 31 views
2

我有一个segue,我从一个屏幕映射到下一个。第一个屏幕总是进入第二页。但是我想确保只有执行了一些代码(例如验证检查确定),segue才会进入第二页。可以设置吗?ios - 如何使一个segue只在一些代码执行后才起作用?

谢谢!

+0

...? – 2012-08-08 16:42:34

+0

@PhillipMills目前,我只是拖动按钮提交到下一个屏幕。我没有在代码中做任何事来推动赛格。 – GeekedOut 2012-08-08 16:43:22

回答

1

就个人而言,直至领域都这样被改变我建议确保该按钮被禁用他们通过验证规则的方式。因此,当这些字段发生变化时,执行验证,一旦他们满足验证规则,就启用segue按钮。

如果您的验证过程比较复杂(例如需要一些服务器往返),则从按钮中移除segue,将您的按钮挂接到IBOutlet,该验证会在验证成功时转换/继续到下一个场景。

+0

关于在应用程序侧导航完成之前禁用按钮的好处。对于服务器端来说,我确实有它,所以在按下按钮时,会有一个服务器调用,并且在处理返回的数据之后,我会尝试在某些情况下不要执行这个循环。但由于某种原因,模拟器无论如何都会继续进入主屏幕。 – GeekedOut 2012-08-08 16:53:58

+0

@GeekedOut是的,我认为你一旦开始就不能停止一段时间(所以在'prepareForSegue'或'performSegue'中执行一个自定义的过程就太迟了)。我认为如果您需要往返服务器来验证数据,则需要使用IBOutlet方法。 – Rob 2012-08-08 16:59:31

+0

@Rob你能解释一下关于如何通过IBOutlet完成这个任务吗? – spacemonkey 2014-08-01 07:49:29

1

你可以让你继续过渡只发生在某个BOOL是YES的情况下。 拥有一个全局的(尽可能广泛的,也许是全局的,也许就在这个范围内,取决于你的源代码)BOOL变量,初始化为NO。一旦确认无误,将其更改为YES。

有哪些要求使用下一个视图控制器(不记得确切的格式)嵌套在if(verificationOK) { }

这样,即使达到该代码的功能,它不会if语句内搞定,除非verificationOK变量已被更改为YES。

编辑 阅读您的意见后, 你可以简单地编程触发SEGUE。 您IBAction为连接到功能,比方说changeView

-(IBAction) changeView:(id) sender { 
    if(verificationOk) { 
     [self performSegueWithIdentifier:@"SeguesIdentifier" sender:nil]; 
    } 
} 

你可以阅读更多关于塞格斯here

+0

是的,这是我正在尝试做的事情,但它在代码的末尾继续搜索,无论它处于哪种状态。 – GeekedOut 2012-08-08 16:48:15

+0

我已经编辑了我的答案 – 2012-08-08 16:48:50

3
-(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];  
    }); 
}); 
} 

(和使用故事板拖动赛格瑞动作不是从您的按钮而是从视图控制器)什么是你目前使用的触发SEGUE ...按钮,表格单元格

相关问题