将NSTextField输入限制为字母数字

时间:2014-04-29 06:21:13

标签: objective-c macos cocoa nstextfield

我正在创建一个简单的应用程序,其中有一个NSTextField,我在打字时只想要字母数字字符。

有人可以建议采取这种方法吗?

4 个答案:

答案 0 :(得分:2)

内置支持。

  • 在Interface Builder中检查"仅罗马字符"文本字段的选项。

OR

  • 在您的代码中设置此属性:

    [myTextField.cell setAllowedInputSourceLocales: @[NSAllRomanInputSourcesLocaleIdentifier]];
    

答案 1 :(得分:-2)

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
 {
    if ([self validCharecter:textField.text){

      return YES;
  }
 else{

      return NO:
   }
   }

    -(BOOL)validCharecter :(NSString)textStr{

        NSCharacterSet *alphaSet = [NSCharacterSet alphanumericCharacterSet];
        BOOL validStr = [[textStr stringByTrimmingCharactersInSet:alphaSet]  isEqualToString:@""];

        return validStr;
  }

尝试不希望它会帮助你!!

答案 2 :(得分:-2)

看看下面的代码示例。 我希望这能帮到您。

 //#define CHARACTERS @" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

 //#define CHARACTERS_NUMBERS  [CHARACTERS stringByAppendingString:@"1234567890"]
  

/////里面的shouldChangeCharactersInRange

///////////>>>>>>>>>>>>>>>>>>

if(textField== txtFldAlpha)
    {

        //Alpha only

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

        NSCharacterSet *unacceptedInput =
        [[NSCharacterSet characterSetWithCharactersInString:CHARACTERS] invertedSet];

        // Create array of strings from incoming string using the unacceptable
        // characters as the trigger of where to split the string.
        // If array has more than one entry, there was at least one unacceptable character
        if ([[string componentsSeparatedByCharactersInSet:unacceptedInput] count] > 1)
            return NO;
        else 
            return YES&&(newLength < 26);
        return YES;
    }

///////////&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;

///////////&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;

if(textField==txtFldNumeric)
    {
        //Num only

        NSUInteger newLength = [textField.text length] + [string length] - range.length;
        NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];

        if ([[string componentsSeparatedByCharactersInSet:nonNumberSet] count] > 1)
            return NO;
        else 
            return YES&&(newLength < 6);
        return YES;

    }

///////////&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;

///////////&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;

if(textField==txtFieldNumAlphaSpecial)
    {
        //Num,Alpha,Special field

        NSUInteger newLength = [textField.text length] + [string length] - range.length;
        return (newLength > 50) ? NO : YES;
    } 

///////////&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;

答案 3 :(得分:-3)

#define ACCEPTABLE_CHARACTERS @" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_."

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string  {
  NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS] invertedSet];

  NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];

  return [string isEqualToString:filtered];
}

实施

  

文本字段:shouldChangeCharactersInRange:replacementString:

在委托中

,检查替换字符串中是否有特殊字符,如果检测到任何字符,则禁止替换。

检查非字母数字的最简单方法如下:

if ([replacementString rangeOfCharacterFromSet:[[NSCharacterSet alphanumericCharacterSet] invertedSet]].location != NSNotFound) {
// There are non-alphanumeric characters in the replacement string
}

希望这有助于交配..!