我有2个UITextFields
,其中一个用于登录,另一个用于密码。
只有当登录“成功”时,我才会将Segue
与Push
一起执行到另一个View Controller
。但是当我触摸按钮时,直接将视图推送到另一个视图而不检查条件。
在StoryBoard中,我将UIButton拖动到我想推送的View Controller,用于通过push选项创建segue。
这是我的代码:
- (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];
}
}
答案 0 :(得分:12)
您需要将segue从整个UIViewController
拖到下一个UIViewController
,即您不应该将UIButton
(或任何IBOutlet)专门连接到下一个UIViewController
{{1}}如果转换是有条件的。
像这样:
答案 1 :(得分:1)
答案 2 :(得分:0)
Swift 4 您仍然可以将UIButton链接到View Controller并创建Segue。如果您的登录成功,则在您的闭包内调用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
}
}
}