UITextField中的Keypressed事件

3

我有10个文本框,每个文本框只能输入一个字符。当一个字符输入到每个文本框时,焦点应该移到下一个文本框。同样地,当我通过按退格键或删除键从文本框中删除字符时,我需要将焦点移动到前一个文本框。如果我能够获取到键盘按下的事件,我就可以做到这一点。目前我找不到任何键盘按下事件的示例。


我希望你在第一个文本框放弃响应者时编写逻辑,然后第二个文本框将成为响应者。为测试字段放置标签并从视图中获取文本字段。编写循环。 - Srinivas
5个回答

8

实现UITextFieldDelegate

实现协议中的委托方法,就能实现您想要的功能。

您可以通过使用becomeFirstResponder方法将焦点设置到所需的文本字段上。

查看委托方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

每当用户在文本字段中键入新字符或删除现有字符时,文本字段都会调用此方法。

这样就可以解决您的问题了。


1
我该如何检测特定按键是否为退格键或删除键? - Xavi Valero
1
看,无论如何你只会支持一个字符。一旦输入了一个字符,你就会得到字符串的长度并移动到下一个字段。如果他删除了字符,则长度将变为零。然后,你会移动到前一个字段。你需要实现这种逻辑。这只是一个想法。 - Ilanchezhian
7
这种方法的问题在于,你始终会落后一个字符,因为如果查询.Text属性,它将具有旧值,而我不确定你应该如何获取在返回“true”后它将拥有的值。 - Kirk Woll
1
Kirk Woll观察的任何解决方案? - Frade

4

根据Aadhira的答案,但考虑到Kirk Woll的评论,你可以使用stringByReplacingCharactersInRange生成最新文本:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
  NSString *value = [textField.text stringByReplacingCharactersInRange:range withString:string];
  NSLog(@"value: %@", value);
  return YES;
}

0

你需要使用 textfieldDelegate 方法。

在你的 textFieldShouldReturn 方法中,你需要设置你的响应者,例如:

if (textfield == textField1)
{
    [textField2 becomeFirstResponder];
}
else if (textField == textField2)
{
    [textField3 becomeFirstResponder];
}
else
{
    [textField3 resignFirstResponder];
}

return YES; // as method return type is BOOL.

0

为了给您指引:

  1. 为每个文本字段分配标签。
  2. 实现UITextFieldDelegate。这里有你需要检测文本字段内发生的任何事件所需的所有方法。在每个方法中,您可以检查标签并适当地移动焦点。

提示:您可以使用[mainView viewWithTag:XX]快速选择所需的文本字段。

每次更改文本时,您都可以检查文本字段的文本属性,它将告诉您按下了哪个按钮。


0

你需要在你的代码中实现UITextFieldDelegate协议,这个方法会告诉你何时开始编辑文本框。

– textFieldShouldBeginEditing:

你可以根据你的需求在这个方法中设置if条件...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接