【问题标题】:Keypressed event in UITextFieldUITextField 中的按键事件
【发布时间】:2011-10-24 05:40:51
【问题描述】:

我有 10 个文本字段,其中每个文本字段只能输入一个字符。在每个文本字段中输入一个字符后,焦点应移至下一个字符。同样,当我通过按退格键或删除从文本字段中删除字符时,我需要将焦点移到前一个文本字段。如果我能得到按键事件,我就能做到。现在我找不到任何按键事件示例。

【问题讨论】:

  • 我希望你应该在第一个 textFeild Resign Responder 时编写逻辑,然后第二个文本字段将成为 Responder .put tags For Testfeilds 并从视图中获取 textfeilds Tag.write For Loop

标签: iphone ios uitextfield


【解决方案1】:

实现UITextFieldDelegate

在协议中实现委托方法。你可以实现你想要的东西。

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

看看委托方法

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

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

这样可以解决你的问题。

【讨论】:

  • 我如何检测到按下的特定键是退格键还是删除键?
  • 看,无论如何你只支持一个字符。输入字符后,您将获得字符串的长度并移至下一个字段。如果他删除该字符,那么长度将变为零。然后,您转到上一个。你实现的那种逻辑。这只是一个想法。
  • 这种方法的问题是你总是会落后一个字符,因为如果你查询 .Text 属性,它将具有旧值,我不确定你是如何'应该得到返回true后它具有的值。
  • 柯克沃尔观察的任何解决方案
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    只是给你指路:

    1. 为每个文本字段分配标签。
    2. Implement UITextFieldDelegate。您需要使用所有方法来检测文本字段内发生的任何事件。在每种方法中,您都可以检查标签并正确移动焦点。

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

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

    【讨论】:

      【解决方案4】:

      您必须在代码中实现 UITextFieldDelegate 协议,当您开始在文本字段中开始编辑时,此方法会告诉您

      – textFieldShouldBeginEditing:

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

      【讨论】:

        【解决方案5】:

        您必须使用textfieldDelegate 方法。

        在您的 textFieldShouldReturn 方法中,您必须将响应者设置为

        if (textfield == textField1)
        {
            [textField2 becomeFirstResponder];
        }
        else if (textField == textField2)
        {
            [textField3 becomeFirstResponder];
        }
        else
        {
            [textField3 resignFirstResponder];
        }
        
        return YES; // as method return type is BOOL.
        

        【讨论】:

          猜你喜欢
          • 2011-02-05
          • 2011-07-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-09
          • 1970-01-01
          • 2012-10-23
          相关资源
          最近更新 更多