所以这就是我在做什么..我有loginviewcontroller和inboxviewcontroller,我通过segue连接我的inboxviewcontroller连接到loginviewcontroller中的登录按钮,我只需要在成功状态下导航到收件箱视图控制器,如果登录失败我需要为了显示一个警报并保持在loginviewcontroller,我检查了prepareforSegue方法并玩了它,但似乎它不会帮助我,因为segue将打开inboxviewcontroller,无论是否调用perpareforsegue。我不想写IBaction for login按钮然后调用 “[self performSegueWithIdentifier:@”segue1“sender:self];”在里面。 这个场景在我脑海中浮现出2个问题 1)perpareforsegue方法是仅用于将数据从一个视图控制器传递到另一个视图控制器而不能用于其他目的(如验证)? 2)我是否需要遵循其他机制进行验证,是否无法验证我的目标?
由于
答案 0 :(得分:1)
就我个人而言,我不喜欢这种方法,我认为segues应该被视为“类似同步的操作”,这意味着一旦它们被触发(手动或自动,如你的场景中),它们应该立即“执行”。 它们与UI相关,而不是模型相关(我打算将异步登录作为我在MVC架构的Model部分中编写的内容)。
但是,您可以尝试以下
1)将你的故事板保持原样(从按钮到下一个视图控制器),但为其指定一个标识符(“segue1”)
2)在您的登录视图控制器中,声明一个“isLogged”属性并放置一个shouldPerformSegueWithIdentifier:sender:override这样
- (BOOL) shouldPerformSegueWithIdentifier:(NSString*) identifier sender:(id) sender {
if (!self.isLogged) {
[self login]; //your login method
}
return self.isLogged;
}
3)在登录方法结束时,登录成功后,请写下
self.isLogged = YES;
[self performSegueWithIdentifier:@"segue1" sender:self];
这样,当第一次点击登录按钮时,它应该触发登录方法而不是执行segue。在登录过程结束时,它应该通过id手动触发segue。