即使在resignFirstResponder上,键盘也不会隐藏在iOS中

时间:2015-04-28 18:56:46

标签: ios iphone ios7 uikeyboard

我有一个包含用户名,密码文本字段和提交按钮的登录页面。 如果焦点在密码文本字段上,并且用户按下提交按钮而不按键盘上的返回键。 键盘被解雇,因为我使用resignFirstResponder来关闭键盘,但是当我点击服务器并且警报来自无效凭证时,则在显示警报的纳秒内,键盘也会出现。 使用下面的代码行来点击登录按钮上的键盘。

[self.passwdTxtFld setDelegate:self];
[self.usernameTxtFld setDelegate:self];
[self.view endEditing:YES];

以下是我从服务器获得响应的代码,并显示警报。

- (void)checkLogin
{



    NSLog(@"???%@",self.usernameTxtFld.text);
    NSDictionary *checkLogin=[pwInteract initializeWithOrgId:@"JVVC" AppId:@"JVVC" LoginId:self.usernameTxtFld.text Password:self.passwdTxtFld.text];

    NSLog(@"checklogin is %@",checkLogin);
    if(checkLogin)
    {
        if(![[checkLogin objectForKey:@"NOTIFICATION"]isEqualToString:@"Y"] && ![[checkLogin objectForKey:@"NOTIFICATION"]isEqualToString:@"NV"]){
            [loggingInAlert dismissWithClickedButtonIndex:loggingInAlert.cancelButtonIndex animated:YES];
            [loggingInAlert removeFromSuperview];

        NSLog(@"?? response is %@",checkLogin);
        NSString *result = [checkLogin objectForKey:@"IS_AUTH"];
        NSString *error = [checkLogin objectForKey:@"ERROR"];

        if ([result isEqualToString:@"Y"] )
        {
            if([self.usernameTxtFld.text isEqualToString:[[NSUserDefaults standardUserDefaults] objectForKey:@"username"]]){
                [[NSUserDefaults standardUserDefaults] setObject:@"olduser" forKey:@"usertype"];

            }
            else{
                [[NSUserDefaults standardUserDefaults] setObject:@"newuser" forKey:@"usertype"];

            }


            [[NSUserDefaults standardUserDefaults]setObject:@"" forKey:@"fetch"];
            [[NSUserDefaults standardUserDefaults]setObject:@"" forKey:@"state"];

            [[NSUserDefaults standardUserDefaults]setObject:@"success" forKey:@"state"];

            [[NSUserDefaults standardUserDefaults]setObject:self.usernameTxtFld.text forKey:@"username"];




            [self performSegueWithIdentifier:@"success" sender:nil];

        }
        else if (![error isEqualToString:@""])
        {
            UIAlertView *networkAlertView = [[UIAlertView alloc] initWithTitle:@"Error" message:error delegate:nil  cancelButtonTitle:@"Ok" otherButtonTitles:nil];
            networkAlertView.tag = 1;
            [networkAlertView show];
            [self.view endEditing:YES];

            if([self.passwdTxtFld isFirstResponder]){
                NSLog(@"pass");
            }

            if([self.usernameTxtFld isFirstResponder]){
                NSLog(@"ddd");
            }
        }
        else if ([result isEqualToString:@""])
        {
            NSString *error = [checkLogin objectForKey:@"ERROR"];
            UIAlertView *networkAlertView = [[UIAlertView alloc] initWithTitle:@"Error" message:error delegate:nil  cancelButtonTitle:@"Ok" otherButtonTitles:nil];
            networkAlertView.tag = 3;
            [networkAlertView show];
        }
        else
        {
            UIAlertView *networkAlertView = [[UIAlertView alloc] initWithTitle:@"" message:@"Oops! Either Username or Password is incorrect. Please type correct Username and Password to proceed." delegate:nil  cancelButtonTitle:@"Ok" otherButtonTitles:nil];
            networkAlertView.tag = 3;
            [networkAlertView show];

        }
    }

        else if([[checkLogin objectForKey:@"NOTIFICATION"]isEqualToString:@"NV"]){
            [customAlert hideActivityIndicator];


        }
    }
    else
    {
        UIAlertView *networkAlertView = [[UIAlertView alloc] initWithTitle:@"Server Error" message:@"No Response From Server." delegate:nil  cancelButtonTitle:@"Ok" otherButtonTitles:nil];
        networkAlertView.tag = 3;
        [networkAlertView show];
    }

}

登录按钮的点击事件已经同时取消了用户名和密码文本字段,也连接了UITextFieldDelegate。 you can see in the image that both UIAlertView and Keyboard are opened.

3 个答案:

答案 0 :(得分:1)

错误: -

根据你的代码,你只是在一个“else if”条件下辞退你的键盘: -

else if (![error isEqualToString:@""])
        {
            UIAlertView *networkAlertView = [[UIAlertView alloc] initWithTitle:@"Error" message:error delegate:nil  cancelButtonTitle:@"Ok" otherButtonTitles:nil];
            networkAlertView.tag = 1;
            [networkAlertView show];
            [self.view endEditing:YES];

如果在[self.view endEditing:YES]方法的第一个语句中重新设置键盘(void)checkLogin,条件就会解决其他问题。

答案 1 :(得分:0)

点击登录按钮或在显示提醒之前尝试[self.view endEditing:YES]。

答案 2 :(得分:0)

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
       [[self view] endEditing:YES];
}

或尝试

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {   
    return YES;
}

// It is important for you to hide the keyboard
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}

同时检查UITextFieldDelegate委托方法

相关问题