Ios 在文本字段中自动添加连字符,但无法编辑文本字段(电话号码屏蔽)
使用下面的代码,我能够自动添加连字符,但不能正确地在文本字段中进行编辑 例如,当我单击在文本字段中已输入的数字之间插入任何数字时,这将在文本字段的末尾插入数字,并且不会正确删除该数字。有人能帮我吗Ios 在文本字段中自动添加连字符,但无法编辑文本字段(电话号码屏蔽),ios,objective-c,uitextfield,phone-number,masking,Ios,Objective C,Uitextfield,Phone Number,Masking,使用下面的代码,我能够自动添加连字符,但不能正确地在文本字段中进行编辑 例如,当我单击在文本字段中已输入的数字之间插入任何数字时,这将在文本字段的末尾插入数字,并且不会正确删除该数字。有人能帮我吗 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if(textField =
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if(textField == txtUserName)
{
if (range.location == 12)
{
return NO;
}
if (range.length == 0 && ![[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[string characterAtIndex:0]])
{
return NO;
}
if (range.length == 0 && (range.location == 3 || range.location == 7))
{
txtUserName.text = [NSString stringWithFormat:@"%@- %@",txtUserName.text,string];
return NO;
}
if (range.length == 1 &&(range.location==4 ||range.location ==7))
{
range.location--;
range.length = 2;
txtUserName.text = [txtUserName.text stringByReplacingCharactersInRange:range withString:@""];
NSLog(@"Nisha..%@",txtUserName.text);
return NO;
}
}
return YES;
}
UITextFieldTextDidChangeNotification
。受影响的文本字段存储在通知的对象参数中notification.object.text的文本格式
如果需要,插入连字符当我们在
UITextField
中复制粘贴文本时,此代码也会起作用
警告-此代码无法与键盘的删除按钮一起使用。无论如何,您只需要键盘的退格按钮,因为移动键盘的删除按钮与键盘的退格按钮类似
注意-对您的UITextField
使用tag
,而不是直接将textField
与您的门店进行比较
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
//(textField == txtUserName)
// don't compare with ID, use tag
if(textField.tag == 0 )
{
NSString *text = textField.text;
NSUInteger textLength = text.length;
NSString *trimText = [text stringByReplacingOccurrencesOfString:@"-" withString:@""];
NSUInteger trimTextLength = trimText.length;
if (range.length == 0 && [string rangeOfCharacterFromSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location != NSNotFound)
{
return NO;
}
if( string.length > 0 ) {
NSString *replacedText = text;
if(trimTextLength < 10) {
NSInteger remainingNumbers = (10-trimTextLength);
if(string.length > remainingNumbers) {
string = [string substringToIndex:remainingNumbers];
}
replacedText = [replacedText stringByReplacingCharactersInRange:range withString:string];
}
NSString *trimReplacedText = [replacedText stringByReplacingOccurrencesOfString:@"-" withString:@""];
if( trimReplacedText.length > 3 ) {
trimReplacedText = [trimReplacedText stringByReplacingCharactersInRange:NSMakeRange(3, 0) withString:@"-"];
}
if( trimReplacedText.length > 7 ) {
trimReplacedText = [trimReplacedText stringByReplacingCharactersInRange:NSMakeRange(7, 0) withString:@"-"];
}
textField.text = trimReplacedText;
return NO;
}
bool flag = false;
if (range.length == 1 &&(range.location == 4 || (range.location == 7 && (textLength-trimTextLength)== 1 && [text rangeOfString:@"-"].location == 7) || (range.location == 8 && (textLength-trimTextLength)== 2) ))
{
range.location--;
range.length = 2;
flag = true;
}
else if (range.length >= 1)
{
flag = true;
}
if(flag) {
NSString *replacedText = [textField.text stringByReplacingCharactersInRange:range withString:@""];
NSString *trimReplacedText = [replacedText stringByReplacingOccurrencesOfString:@"-" withString:@""];
if( trimReplacedText.length > 3 ) {
trimReplacedText = [trimReplacedText stringByReplacingCharactersInRange:NSMakeRange(3, 0) withString:@"-"];
}
if( trimReplacedText.length > 7 ) {
trimReplacedText = [trimReplacedText stringByReplacingCharactersInRange:NSMakeRange(7, 0) withString:@"-"];
}
textField.text = trimReplacedText;
return NO;
}
}
return YES;
}
-(BOOL)textField:(UITextField*)textField应更改字符范围:(NSRange)范围替换字符串:(NSString*)字符串
{
//(textField==txtUserName)
//不要与ID比较,使用标签
如果(textField.tag==0)
{
NSString*text=textField.text;
NSUTEGER textLength=text.length;
NSString*trimText=[text STRINGBYREPLACINGOURCRENCESOFSTRING:@“-”和字符串:@“];
NSU整数trimTextLength=trimText.length;
if(range.length==0&&[string rangeOfCharacterFromSet:[[NSCharacterSet-decimalDigitCharacterSet]InversedSet].location!=NSNotFound)
{
返回否;
}
如果(string.length>0){
NSString*replacedText=文本;
如果(trimTextLength<10){
NSInteger remainingNumbers=(10 trimTextLength);
if(string.length>remainingNumbers){
字符串=[string substringToIndex:remainingNumbers];
}
replacedText=[replacedText StringByReplacingCharactersRange:range with string:string];
}
NSString*trimReplacedText=[replacedText stringByReplacingOccurrencesOfString:@“-”带字符串:@“];
如果(trimReplacedText.length>3){
trimReplacedText=[trimReplacedText StringByReplacingCharactersRange:NSMakeRange(3,0),带字符串:@“-”];
}
如果(trimReplacedText.length>7){
trimReplacedText=[trimReplacedText StringByReplacingCharactersRange:NSMakeRange(7,0),带字符串:@“-”];
}
textField.text=trimplacedtext;
返回否;
}
布尔标志=假;
如果(range.length==1&&(range.location==4 | | |(range.location==7&&(textLength trimmtextlength)==1&[text rangeOfString:@“-”]。location==7)|(range.location==8&(textLength trimmtextlength)==2)))
{
range.location--;
range.length=2;
flag=true;
}
否则如果(range.length>=1)
{
flag=true;
}
国际单项体育联合会(旗){
NSString*replacedText=[textField.text stringByReplacingCharactersInRange:range with string:@'';
NSString*trimReplacedText=[replacedText stringByReplacingOccurrencesOfString:@“-”带字符串:@“];
如果(trimReplacedText.length>3){
trimReplacedText=[trimReplacedText StringByReplacingCharactersRange:NSMakeRange(3,0),带字符串:@“-”];
}
如果(trimReplacedText.length>7){
trimReplacedText=[trimReplacedText StringByReplacingCharactersRange:NSMakeRange(7,0),带字符串:@“-”];
}
textField.text=trimplacedtext;
返回否;
}
}
返回YES;
}
即使这个问题也太老了,但如果您需要帮助,可以使用VMaskTextField库
您的问题不清楚??Sujay说了什么,我们不知道您的代码试图实现什么。最具体地说,您希望连字符显示在哪里以及何时显示?从您的代码中可以清楚地看出,您有相应的条件,但我们不知道这些条件是什么。连字符工作正常。。但是当我在做数字编辑时,那是行不通的。当我在数字中输入数字时,它就结束了。我希望在我的代码中进行编辑更正。但是这种重新格式化的“规则”是什么?请说明清楚。假设用户第一次输入的号码是123-456-7890。之后,他想将数字4更改为7,那么7位没有插入正确的位置。并且将超过10位数字的限制。我想解决这个问题。你能给我举个例子吗。如何实现你所说的。@Sujay……我又不能编辑数字了。这不能解决我的问题你在尝试什么,你是如何尝试的?”假设用户第一次输入数字,如123-456-7890。之后,他想将数字4更改为7,然后7位没有插入到正确的位置。并且将超过10位数字的限制。我想解决此问题。”这就是你想要的,对吧?我正在试着编辑他们写的号码。就像我第一次写“123-456-7890”莫布里号码一样。下一次我想,哦,4的位置是0。我怎么能编辑那个数字呢?是啊,那是ohkiee,你做的很好。但是我想让用户重新开始编辑数字,他可以编辑任何他想要的数字,而不仅仅是限制一个数字。但数量的限制不会被取消