我有一个包含用户名,密码文本字段和提交按钮的登录页面。 如果焦点在密码文本字段上,并且用户按下提交按钮而不按键盘上的返回键。 键盘被解雇,因为我使用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。
答案 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
委托方法