UITextField上的键盘解散但无法单击其他UITextField

时间:2014-01-22 07:46:51

标签: ios objective-c xcode keyboard uitextfield

我想要用于登录的两个UITextFields,一个用于用户名,一个用于密码。在我无法解开第一个UITextField中的键盘之前,我设法解决了这个问题,现在的问题是,一旦它解散我就无法点击另一个UITextField来输入密码,键盘被解雇后,我只是卡在用户名UITextField中,所以特别是我什么也做不了。有关如何关闭键盘然后单击其他UITextField以输入信息的任何建议?

@interface LoginViewController () <UITextFieldDelegate>

@end

@implementation LoginViewController

@synthesize managedObjectContext, usernameField, passwordField;

-(void) textFieldDidEndEditing:(UITextField *)textField{

}

-(void) textFieldDidBeginEditing:(UITextField *)textField{

    [self.usernameField becomeFirstResponder];
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField{

//error occurs here
[self.usernameField resignFirstResponder]; 
return YES;
}

3 个答案:

答案 0 :(得分:1)

这样做,这件事很简单

设置文本字段的标记

usernameField.tag=1;
passwordField.tag=2; 

然后是一个解除键盘的委托方法

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{

 [userNameField resignFirstResponder];
 [passwordField resignResponder];
 }
return YES; 
} 

更新我的结果

答案 1 :(得分:0)

您在textFieldDidBeginEditing

处的代码存在问题

每次在开始编辑时打开用户名字段的键盘。

-(void) textFieldDidEndEditing:(UITextField *)textField{

if(textField==self.usernameField)
{
 [self.passwordfield becomeFirstResponder];
}

}

-(void) textFieldDidBeginEditing:(UITextField *)textField{

  //  [self.usernameField becomeFirstResponder];
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField{

//error occurs here
if(textField==self.passwordField)
{
[self.view EndEditing:YES];
}
return YES;
}

答案 2 :(得分:0)

解决上述问题的最简单方法是将textFieldDidBeginEditing函数更改为:

-(void) textFieldDidBeginEditing:(UITextField *)textField{

    [textField becomeFirstResponder];
}

textFieldShouldReturn更改为以下

- (BOOL)textFieldShouldReturn:(UITextField *)textField{

[textField resignFirstResponder]; 
return YES;
}

上述代码允许用户选择输入顺序。也就是说,用户可以先输入密码,然后输入用户名。如果您希望用户始终首先输入用户名,则可以将textFieldDidBeginEditing更改为

-(void) textFieldDidBeginEditing:(UITextField *)textField{
        if(textField == self.passwordField && [self.userField.text isEqualToString:@""])
             [self.usernameField becomeFirstResponder];
        else
             [textField becomeFirstResponder];
    }

这将确保如果用户名字段为空,则始终选中该字段。如果不是,则程序将选择用户触摸的任何文本字段进行编辑。

我希望这能回答你的问题,虽然有点晚。我认为这比使用和监控标签更简单。