我对目标C和iOS都很陌生,因为我主要是一个C ++ / java开发人员而且我不能让我的生活让performSegueWithIdentifier
正常工作,换句话说,它不会移动到下一个Segue公司。我正在建立一个简单的登录系统,如果状态代码不是401或403,我有一个条件,然后转到主应用程序。目前在我的故事板中,我有我的主视图控制器,我的textFields和一个登录按钮。然后,我使用标识符MainViewController
和样式MoveToMainApp
从model
(不是按钮)创建了一个segue。在我的主视图控制器的实现文件中,我有以下方法:
-(void)moveToMainApp
{
[self performSegueWithIdentifier:@"MoveToMainApp" sender:nil];
}
- (IBAction)login:(id)sender {
NSString *username = _usernameTxt.text;
NSString *password = _passwordTxt.text;
_errorLabel.text = @"";
if(username.length > 0 && password.length > 0)
{
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://samplesite.org/mobile_app"]];
[httpClient setParameterEncoding:AFFormURLParameterEncoding];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST"
path:@"http://samplesite.org/mobile_app/login.php"
parameters:@{@"username":username, @"password":password}];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[httpClient registerHTTPOperationClass:[AFHTTPRequestOperation class]];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
// Print the response body in text
NSLog(@"Response: %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
NSInteger statusCode = operation.response.statusCode;
if(statusCode == 401 || statusCode == 403)
{
_errorLabel.text = @"Invalid credentials";
}
else
{
[self moveToMainApp];
}
}];
[operation start];
}
我在这里缺少什么?
答案 0 :(得分:0)
我建议使用UINavigationController并在各处推送segue以便于viewController导航。但是对于你目前的模态segue问题,我想知道它是否没有转换,因为segue来自视图控制器本身,而不是按钮。尝试创建一个按钮并让segue从它移动到下一个视图控制器,但是按钮隐藏,禁用,并且在角落中,因此用户无法触发。所以基本上将视图控制器中的源更改为按钮。这就是我想要一个segue时所做的,但是希望它以编程方式触发,除了我使用push segues。您可以尝试的另一件事是在当前视图控制器上调用presentVewController:animated:completion:
,并通过在调用之前创建它的实例来呈现下一个视图控制器。如果希望显示的视图控制器消失,只需调用dismissViewControllerAnimated:completion:
即可。希望这有帮助!