将 NSTextField 输入限制为字母数字
Posted
技术标签:
【中文标题】将 NSTextField 输入限制为字母数字【英文标题】:Restricting NSTextField input to alpha-numeric 【发布时间】:2014-04-29 06:21:13 【问题描述】:我正在制作一个简单的应用程序,其中有一个 NSTextField
,我只需要在其中输入字母数字字符。
谁能建议一个解决这个问题的方法?
【问题讨论】:
解决方案似乎需要子类化;见:***.com/questions/4652689/… allow only alphanumeric characters for a UITextField的可能重复 @RahulPatel 问题是关于NSTextField
,而不是UITextField
。
【参考方案1】:
对此有内置支持。
在 Interface Builder 中,选中文本字段的“仅罗马字符”选项。或
在您的代码中设置此属性:
[myTextField.cell setAllowedInputSourceLocales: @[NSAllRomanInputSourcesLocaleIdentifier]];
【讨论】:
pointum 这似乎是最好的方法,但这不起作用:(在我创建文本字段时使用此代码仍然接受特殊字符:'(【参考方案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;
用dis试试,希望对你有帮助!!
【讨论】:
非常感谢回答 Raju :) 会检查一下 NSTextField 不是 UITextField,拜托!【参考方案3】:看看下面的代码示例。 我希望这能帮到您。
//#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;
///////////
//////////>>>>>>>>>>>>>>>>>>>
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;
///////////
//////////>>>>>>>>>>>>>>>>>>>
if(textField==txtFieldNumAlphaSpecial)
//Num,Alpha,Special field
NSUInteger newLength = [textField.text length] + [string length] - range.length;
return (newLength > 50) ? NO : YES;
///////////
【讨论】:
您能否提及shouldChangeCharactersInRange
方法的声明位置?请注意,问题是关于 Cocoa-NSTextField。与 ios 无关。【参考方案4】:
#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];
或 实施
textField:shouldChangeCharactersInRange:replacementString:
在委托中,检查替换字符串是否有特殊字符,如果检测到任何替换,则禁止替换。
检查非字母数字的最简单方法如下:
if ([replacementString rangeOfCharacterFromSet:[[NSCharacterSet alphanumericCharacterSet] invertedSet]].location != NSNotFound)
// There are non-alphanumeric characters in the replacement string
希望这有助于交配..!
【讨论】:
非常感谢回答 iAhmed :) 会检查一下 欢迎 :)如果有帮助,请接受它作为答案 :) UITextField 不是 NSTextField 看标签 osx 可能以上是关于将 NSTextField 输入限制为字母数字的主要内容,如果未能解决你的问题,请参考以下文章
无法将字符限制为 iOS 中 UITextField 内的字母数字 [重复]