无法将字符限制为 iOS 中 UITextField 内的字母数字 [重复]

Posted

技术标签:

【中文标题】无法将字符限制为 iOS 中 UITextField 内的字母数字 [重复]【英文标题】:Unable to limit characters to only alphanumeric inside UITextField in iOS [duplicate] 【发布时间】:2014-02-19 05:21:06 【问题描述】:

在我的 ios 应用程序中,我有一个 UITextField,它目前将其字符输入限制为 50 个字符,当它接收到单个字符时,它会启用一个 UIButton。我现在要做的是确保用户也只能输入字母数字字符,但这是我遇到问题的地方。这是我到目前为止的代码:

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

BOOL canEdit=NO;
    NSCharacterSet *myCharSet = [NSCharacterSet alphanumericCharacterSet];
    NSUInteger newLength = [textField.text length] + [string length] - range.length;

    if (newLength > 0) 

        for (int i = 0; i < [string length]; i++)
        
            unichar c = [string characterAtIndex:i];
            if (![myCharSet characterIsMember:c])
            
                canEdit=NO;
                self.myButton.enabled = NO;
            
            else
            
                canEdit=YES;
                self.myButton.enabled = YES;
            
        

      else  self.myButton.enabled = NO;


    return (newLength > 50 && canEdit) ? NO : YES;

最初,我的代码只是将字符输入限制为 50 个字符,启用按钮如下所示:

NSUInteger newLength = [textField.text length] + [string length] - range.length;

    if (newLength > 0) self.doneButton.enabled = YES;
    else self.doneButton.enabled = NO;

    return (newLength > 45) ? NO : YES;

我想说的是,我想在现有代码中加入字母数字字符的限制,而不是替换它。这对我来说是具有挑战性的部分。

【问题讨论】:

希望对您有所帮助..rajneesh071.blogspot.in/2012/12/… 您已经asked this, and got an answer,然后删除了您的问题。请勿转发。 【参考方案1】:

当字符是非字母数字字符时,您需要循环并返回 NO 给方法。所以,你的代码应该是这样的:

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

    BOOL canEdit=NO;
    NSCharacterSet *myCharSet = [NSCharacterSet alphanumericCharacterSet];
    for (int i = 0; i < [string length]; i++) 
        unichar c = [string characterAtIndex:i];
        if (![myCharSet characterIsMember:c]) 
            return NO;
        
    
    NSUInteger newLength = [textField.text length] + [string length] - range.length;

    if (newLength > 0) 

        for (int i = 0; i < [string length]; i++)
        
            unichar c = [string characterAtIndex:i];
            if (![myCharSet characterIsMember:c])
            
                canEdit=NO;
                self.myButton.enabled = NO;
            
            else
            
                canEdit=YES;
                self.myButton.enabled = YES;
            
        

      else  self.myButton.enabled = NO;


    return (newLength > 50 && canEdit) ? NO : YES;

【讨论】:

以上是关于无法将字符限制为 iOS 中 UITextField 内的字母数字 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

iOS输入框UITextField输入限制

iOS 限制UITextfield的字数

将 iOS 中的 UIlabel 文本字段限制为两个字符,输入 3 个或更多时重置

ios--uitextfield动态限制输入的字数(解决方式)

UITextField限制汉字数量最正确的姿势,解决iOS7下substringToIndex方法导致的崩溃

iOS - NSJSONSerialization:无法将数据转换为围绕字符的字符串