限制NSTextField的输入

一个比较笨的方法----限制NSTextField的输入。

基本思路:取得当前输入的字符,如果不满足条件,就在NSTextField中将当前输入删除。

-(void)textFieldNotAllowedInput:(NSTextField*)textField inString:(NSString*)inString atIndex:(int)atIndex
{
NSRange rangeFirst =NSMakeRange(0, atIndex -1);
NSString* strFirst = [inString substringWithRange:rangeFirst];
NSRange rangeLast =NSMakeRange(atIndex, [inString length]-atIndex);
NSString* strSec = [inString substringWithRange:rangeLast];
[textField setStringValue:@""];
NSString* strInputTemp = @"";
[textField setStringValue:[strInputTemp stringByAppendingString:strFirst]];
strInputTemp = [textField stringValue];
[textField setStringValue:[strInputTemp stringByAppendingString:strSec]];
[[textField currentEditor] setSelectedRange:NSMakeRange(atIndex-1,0)];
}



在判断NSTextField当前输入时,需要一个callback函数,可以通过NSTextField的

-(void)textDidChange:(NSNotification *)notification 来进行callback的设置。


设置好callback之后,就可以调用以上的方法,对NSTextField进行各种限制啦。

例如:


- (void)myTextFieldCallBack
{
NSRange range = [[myTextField currentEditor] selectedRange];
int iSel = range.location;
NSString*strInput = [myTextField stringValue];
constchar*acStr = [strInput UTF8String];
intnLen = [strInput length];
// 限制最大输入长度
if (nLen >6) 
{
[self textFieldNotAllowedInput:myTextField inString:strInput atIndex:iSel];
return;
}
char cInputTmp = acStr[iSel -1];
// 限制输入:只有小数点和数字可以输入
if (('.'==acStr[iSel-1]) || (cInputTmp >= '0' && cInputTmp <='9') )
{
}
else
{
[self textFieldNotAllowedInput:myTextField inString:strInput atIndex:iSel];
return;
}
// 限制小数点后只能输入两位
if ((cInputTmp >='0' && cInputTmp <='9') )
  {
NSRange range = [strInput rangeOfString:@"."];
if(range.length > 0)
{
 if( ((nLen - range.location) > 3))
 {
 [self textFieldNotAllowedInput:myTextField inString:strInput atIndex:iSel];
 return;
 }
    }
  }
// 限制小数点出现的位置和次数
        // 第一个字符不能是小数点
if ('.' == acStr[iSel-1])
{
 if (iSel <2) 
 {
  [self textFieldNotAllowedInput:myTextField inString:strInput atIndex:iSel];
  return;
 }
// 小数点在整个字串中只能出现一次 
NSRange rangesearch1 =NSMakeRange(0, iSel-1);
NSRange rangesearch2 =NSMakeRange(iSel, [strInput length]-iSel);
NSRange range1 = [strInput rangeOfString:@"." options:nil range:rangesearch1];
NSRange range2 = [strInput rangeOfString:@"." options:nil range:rangesearch2];
if(range1.length > 0 || range2.length >0)
 {
  [self textFieldNotAllowedInput:myTextField inString:strInput atIndex:iSel];
  return;
 }
 }
}




你可能感兴趣的:(String,callback)