过滤输入UITextField的字符

tea*_*bot 12 iphone objective-c uitextfield

我的应用程序中有一个UITextField.我想限制可以输入到字段中的字符集到我定义的集合.当使用UITextFieldDelegate方法提交文本时,我可以过滤输入到字段中的字符:

- (BOOL)textFieldShouldReturn:(UITextField*)textField
Run Code Online (Sandbox Code Playgroud)

然而,这给用户留下了错误的印象,因为虽然从最终值中删除了受限制的字符,但在按下Return/Done/etc之前它们仍然可见地输入到文本字段中.什么是阻止在键盘上选择文本字段中出现限制字符的最佳方法?

注意:我的操作是假设我无法控制iPhone键盘提供哪些键.我知道我可以在各种键盘实现之间切换,但我的印象是我无法禁用特定键.这个假设可能不正确.

tea*_*bot 25

我按照marcc的建议做了,效果很好.示例实现如下.

注意:为简洁起见,选择了变量名称,但未反映我的编码标准:

    ...
    myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"xyzXYZ"];
    ...
}

- (BOOL) textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)textEntered {
    for (int i = 0; i < [textEntered length]; i++) {
        unichar c = [textEntered characterAtIndex:i];
        if (![myCharSet characterIsMember:c]) {
            return NO;
        }
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

  • 制作myCharset = [NSCharacterSet characterSetWithCharactersInString:@"xyzXYZ\b"]; 将允许退格 (4认同)
  • @PatrickAnarna:检查最后一个字符是不够的.`textEntered`可以是带有多个字符的粘贴文本块. (2认同)

mar*_*rcc 14

看着 textField:shouldChangeCharactersInRange

UITextFieldDelegate无论何时键入新字符或从文本字段中删除现有字符,都会调用此方法.您可以返回NO以不允许更改.

  • 可以在此处找到此答案的示例代码:http://stackoverflow.com/questions/1013647/filtering-characters-entered-into-a-uitextfield/1015262#1015262 (2认同)
  • 很好的工作将URL添加到您的答案中,就在这一点之下.+1 (2认同)