ios - 需要有关 shouldChangeCharactersInRange 的帮助

标签 ios objective-c uitextfield uitextfielddelegate

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if([string isEqualToString:@" "] || [string isEqualToString:@"@"] || [string isEqualToString:@"!"] || [string isEqualToString:@"#"] || [string isEqualToString:@"$"] || [string isEqualToString:@"%"] || [string isEqualToString:@"^"] || [string isEqualToString:@"&"] || [string isEqualToString:@"*"] || [string isEqualToString:@"("] || [string isEqualToString:@")"] || [string isEqualToString:@"+"] || [string isEqualToString:@"-"])
        return NO;
    return YES;
}

我正在使用这种方法来限制所有这些字符。当用户从键盘输入文本时它工作正常。如果用户粘贴文本或使用 siri 输入文本,则不会发生任何事情。

如何解决。

最佳答案

当您通过键盘输入文本时,shouldChangeCharactersInRange 会在每个输入的string 参数中为您提供单个字符。当您粘贴它或通过 siri 输入时,它会为您提供整个字符串或已添加的单词。在您的情况下,您将字符串作为单个字符进行比较,这在粘贴和 siri 案例中失败了。我已经为您编写了代码片段。试试看,然后告诉我它是否有效。它基本上从字符串中删除特殊字符。

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if([string length] > 0)
    {
         NSCharacterSet *notAllowedChars = [NSCharacterSet characterSetWithCharactersInString:@"~!@#$%^&*(){}_+:\"<>?,./;'[]-="];
         NSString *resultString = [[string componentsSeparatedByCharactersInSet:notAllowedChars] componentsJoinedByString:@""];
         textField.text = [NSString stringWithFormat:@"%@%@", textField.text, resultString];
         return NO;
    }
    return YES;
}

关于ios - 需要有关 shouldChangeCharactersInRange 的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18952368/

相关文章:

ios - Xcode 编译错误 : Lipo: can't open input file

ios - 如何在 Firebase 身份验证后转换到新的 viewController?

iphone - 当名字或姓氏为空时,从手机联系人设置部分列表时出现问题

objective-c - 将字符串中出现的两个字符相互替换

objective-c - 在突出显示/选择单元格时,在自定义 UITableViewCell 中为 UITextField 提供正确的文本颜色

javascript - Swift 在应用程序终止时清除 webview 缓存

objective-c - 我可以重复使用我的应用程序 IPA、编辑其中的资源并使用脚本更新 CodeResources 吗?

ios - 使用 "Next"作为返回键

ios - 出现键盘时尝试移动 View - 一些错误

ios - 第一次更改 UITextField 属性 isSecureTextEntry 时键盘闪烁