在Storyboards中login成功后执行segue

我有2个UITextFields ,其中一个用于login,另一个用于密码。

只有login是“成功”的,我想执行Segue Push到另一个View Controller 。 但是,当我触摸button时,直接将视图推送到另一个视图,而不检查条件。

在StoryBoard中,我从UIButton拖动到我想要推送的视图控制器,用于通过push选项创buildsegue。

这是我的代码:

 - (IBAction)buttonLogin:(id)sender { if (([self.textFieldLogin.text isEqualToString:@"User"]) && ([self.textFieldPassword.text isEqualToString:@"1515"])){ [self performSegueWithIdentifier:@"SegueLogin" sender:self]; }else{ UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"User wrong" message:@"Fill up again the user info" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:@"Cancel", nil]; [alert show]; } } 

您需要将整个UIViewController的segue拖到下一个UIViewController ,也就是说,如果过渡的条件,则不应该将UIButton (或任何IBOutlet)连接到下一个UIViewController

像这样:

在这里输入图像说明

您正在使用错误的逻辑运算符。

用户&&而不是在你的if语句中。

为了更好地理解两者之间的差异,我build议你阅读这个其他堆栈溢出的答案。

Swift 4你仍然可以将UIButton链接到View Controller并创build一个Segue。 如果您的login成功,则在您的closures中调用self.performSegue。 像这样的东西…

 @IBAction func loginButtonPressed(_ sender: AnyObject) { authenticateUser(email: email.text!, password: password.text!) } func authenticateUser(email: String, password: String){ # Building your loginUrl goes here Alamofire.request(loginUrl!, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: headers) .validate() .responseJSON { (response:DataResponse<Any>) in switch(response.result) { case .success(_): let apiResponse : JSON = JSON(response.result.value!) print("Now Performing Segue on IBAction Pressed") self.performSegue(withIdentifier: "goToDashboard", sender: self) break case .failure(_): print(response.result.error) break } } }