我有一个带有用户名、密码文本字段和提交按钮的登录页面。 如果焦点在密码文本字段上并且用户按下提交按钮而没有按下键盘上的返回键。 键盘被关闭,因为我使用 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 也已连接。
最佳答案
错误:-
根据您的代码,您只是在一个“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];
其他 if 条件呢,如果您在 (void)checkLogin
方法。
关于ios - 即使在 resignFirstResponder 上,键盘也不会隐藏在 iOS 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29927677/