【问题标题】:iPhone Keyboard Filter QuestioniPhone 键盘过滤器问题
【发布时间】:2010-10-06 02:14:44
【问题描述】:

我想限制用户可以在 iPhone 键盘上输入的字符,所以我创建了一个自己的数组。例如该数组包括 0~9 和一个点,使用户能够输入价格。然后如果替换字符串不在数组中,我可以return NO 替换-(BOOL)textField:shouldChangeCharactersInRange:replacementString:

问题是当我使用这个数组过滤文本时,退格按钮也被禁用。关于如何启用退格按钮的任何想法?

另一个问题是我想让用户输入他们的名字,因此我不想让他们切换到数字和标点符号(如果我使用数组进行过滤,退格按钮也会被锁定)。如何禁用键盘上的开关按钮(现在我只限制它们输入 a~z、空白和 "." ,但我认为禁用开关按钮可能是更好的方法)?

【问题讨论】:

    标签: iphone keyboard filtering


    【解决方案1】:

    我找到了一种方法(可能还不够好,但它可以完成退格功能的工作):

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        if(textField == txtChargeAmt)
        {
            if(string.length == 0)  //backspace button is pressed
            {
                textField.text = [textField.text substringToIndex:(textField.text.length - 1)];
                return NO;
            }
    
            for(NSString *s in arrNumberAndDot)
            {
                if([string isEqualToString:s])
                {
                    return YES;
                }
            }
            return NO;
        }
        else
            return YES;
    }
    

    欢迎提出有关退格问题的其他想法。那么如何禁用开关按钮呢?

    【讨论】:

      【解决方案2】:

      我想我不确定您为什么要对这两种不同类型的输入使用相同的 TextField。

      我将有两个字段,一个用于输入姓名的字母数字字段和一个用于输入数字的数字字段。

      或者我没有得到你的问题?

      【讨论】:

      • 没关系。我看到苹果的数字小键盘真的和手机小键盘一样。相同的布局,没有小数点。为什么?
      • 我没有使用相同的 TextField。如您所见,我使用 txtChargeAmt 输入价格,其他文本字段可能允许我输入其他字符串,例如名字/姓氏。
      【解决方案3】:

      这会更简洁(高效)地做你想做的事:

      - (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string
      {
          NSCharacterSet *validCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@".0123456789"];
      
          BOOL shouldChange = 
              [string length] == 0 || // deletion
              textField != txtChargeAmt || // not the field we care about
              [string rangeOfCharacterFromSet:validCharacterSet].location != NSNotFound;
      
          if (!shouldChange)
          {
              // Tell the user they did something wrong.  There's no NSBeep() 
              // on the iPhone :(
          }
      
          return shouldChange;
      }
      

      我会在其他地方构建该字符集,因此您只需执行一次,但您明白了。有人对如何提醒用户他们使用了无效字符有任何想法吗?我正在尝试解决类似的问题。

      【讨论】:

      • 您可以使用 CoreAnimation 快速摇动文本字段,就像 Mac OS X 登录窗口在拒绝您的密码时所做的那样。不知道这是一个多么伟大的想法,但它是一个想法。
      猜你喜欢
      • 2015-12-28
      • 2014-11-14
      • 2011-12-15
      • 2011-02-01
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 2011-11-25
      • 1970-01-01
      相关资源
      最近更新 更多