【问题标题】:Keyboard on UITextField dismisses but cannot click other UITextFieldUITextField 上的键盘关闭但无法单击其他 UITextField
【发布时间】:2014-02-12 03:53:50
【问题描述】:

我有两个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;
}

【问题讨论】:

  • 尝试替换 [self.usernameField resignFirstResponder];与 [testField resignFirstResponder];
  • 确保正确连接 self.usernameField 委托或尝试 [textField resignFirstResponder];
  • 对不起,伙计们,由于某种原因它现在可以工作,我无法解释,但现在我有另一个问题,我改变了问题,你介意查看更新的问题
  • 检查我的回答,希望对你有用。

标签: ios objective-c xcode keyboard uitextfield


【解决方案1】:

这样做,这件事就简单了

为文本字段设置标签

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

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

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

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

更新我的结果

【讨论】:

  • 这行得通,但是为了关闭键盘,我必须按两次“完成”,我该如何做到,所以我只需要按一次?
  • 标签部分帮助我区分 UITextFields 所以这个答案很有用谢谢
  • 是的,你好像是个新手,所以参考很多笔记,然后,youtube视频也会有帮助
【解决方案2】:

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;
}

【讨论】:

  • 这行得通,但是为了关闭键盘,我必须按两次“完成”,我该如何做到,所以我只需要按一次?
【解决方案3】:

解决上述问题最简单的方法是将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];
    }

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

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

【讨论】:

    猜你喜欢
    • 2011-06-13
    • 2011-06-11
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多