【问题标题】:iPhone Text Field Only One Input TypeiPhone 文本字段只有一种输入类型
【发布时间】:2012-03-01 17:44:27
【问题描述】:

我的项目中有一些文本字段。

我希望文本字段的输入类型只有一种。例如信用卡号文本字段的输入只能是小数并且用户输入另一个类型字符,它将在文本字段中删除或不接受。

对不起,我的英语不好。

【问题讨论】:

    标签: iphone textfield


    【解决方案1】:

    您必须在 textField 的委托中使用 textField:shouldChangeCharactersInRange:replacementString:,对任何更改都返回 YES 或 NO。您可以分析 replacementString 中的禁用字符,如果发现则拒绝它。

    【讨论】:

    • 谢谢,我试过了。但它只有在输入输入并从键盘完成后才能工作。我希望当用户开始输入时,如果用户输入禁止字符,它会自动拒绝。
    • @mozkarakoc 我不明白你的评论。该方法在文本发生任何更改之前执行。每次用户尝试输入一个字符时,都会调用它,您可以拒绝该字符。
    • 可能我不明白如何检查“textField:shouldChangeCharactersInRange:replacementString”中的禁用字符。您能否提供示例代码或更详细的来源?
    【解决方案2】:

    如果你已经通过代码创建了UITextField,那么你需要进行如下设置:

    textField.keyboardType = UIKeyboardTypeNumberPad;

    【讨论】:

    • 这不是一个好的解决方案,因为用户可以在文本字段上复制/粘贴任何字符串。
    • 是的,我通过代码创建了一个文本字段,并使用 DecimalPad 更改了键盘类型。但是现在,我没有为 DecimalPad 添加返回键。
    【解决方案3】:

    你可以像下面这样声明并使用

    #define LEGAL   @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz "
    
    
    // allow only legal letters
    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:LEGAL] invertedSet];
        NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
        return [string isEqualToString:filtered];
    }
    

    我们也可以这样使用

    entryField.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      • 2020-03-14
      相关资源
      最近更新 更多