2011-04-27 26 views

回答

5

试试这个代码。

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

    NSString *separator = @"-"; 
    int seperatorInterval = 5; 
    NSString *originalString = [textField.text stringByReplacingOccurrencesOfString:separator withString:@""]; 

    if (![originalString isEqualToString:@""] && ![string isEqualToString:@""]) { 

     NSString *lastChar = [textField.text substringFromIndex:[textField.text length] - 1]; 
     int modulus = [originalString length] % seperatorInterval; 

     if (![lastChar isEqualToString:separator] && modulus == 0) { 

      textField.text = [textField.text stringByAppendingString:separator]; 
     } 
    } 

    return YES; 
} 
+0

只是在实现这一个现在,得到一些错误......但只是因为我是一个菜鸟:P – tinhead 2011-04-27 21:21:02

+0

如何连接到我的regTextField?此外,我不知道我必须在此方法的标题中声明什么。 – tinhead 2011-04-27 23:15:15

+0

男人...尝试了我所知道的一切,不能得到这个工作.. – tinhead 2011-04-28 02:27:34

0

只需声明并分配一个2个字符串即可。将数字存储在一个字符串(str 1)中并对每个条目的字符串长度进行计数。检查时,该字符串lenght将四位,执行

str2 = [str1 appendByString:@"`"]; 

现在str1 = str2;

再次重复这个过程中循环使用4位数字的增量。

希望它会有所帮助。

+0

人力资源管理模式,是有帮助,但我不知道这是否会动态地添加的连字符的用户类型....说的时候用户在键入文本字段时,我想让连字符在第五个字符后弹出,而不会与用户键入数字序列干涉。 – tinhead 2011-04-27 04:48:15

+0

这将有助于当你最后的字符串来。不要以为它会在那个时候显示你的用户输入的数字。 – 2011-04-27 04:56:38

1

假设您使用UITextField进行输入,则可以使用UITextFieldTextDidChangeNotification操作在每次修改文本时作出响应。一个快速而粗略的例子:

- (IBAction)textChanged:(UITextField*)sender 
{ 
    NSString* curText = sender.text; 

    //when checking the length, you need to exclude hyphens from the count 
    //which is currently not being done (thanks @titaniumdecoy) 
    if([curText length] % 5 == 0) 
    { 
     sender.text = [curText stringByAppendingString:@"-"]; 
    } 
} 
+0

这将不允许您通过最后插入的连字符后退。 – titaniumdecoy 2011-04-27 04:51:59

+0

你也没有考虑到连字符本身对字符串长度的贡献。 – titaniumdecoy 2011-04-27 04:53:35

+0

对不起,这里迟到了,出于某种原因,我认为这是一个UILabel实现的事情。我会添加一条评论来思考这个问题(因为额外的代码将超出答案的范围)。感谢您指出。 – 2011-04-27 04:55:07

0

只是一个概念试图让每个5个字符的字符串,然后连字符追加到这些串联,然后每一个。为此,你需要做substrings.use数组中此逻辑功能

-(NSString *)makeMyString:(NSString *)stringA 
{ 
NSMutableArray *tempArray1=[NSMutableArray array]; 
    //NSString *[email protected]"12345123451234512"; 
     NSString *s=stringA; 
    BOOL flag=YES; 
    while(flag) 
    { 
     NSString *str; 
     if([s length]>=5) 
      str=[s substringWithRange:NSMakeRange(0,5)]; 
     else 
      str=s; 
     [tempArray1 addObject:str]; 
     str=nil; 
     if([s length]>=5) 
      s=[s substringWithRange:NSMakeRange(5,([s length]-5))]; 
     else 
      [email protected]""; 
     if([s isEqualToString:@""]) 
      flag=NO; 
    } 

    NSString *[email protected]""; 
    for(int i=0;i<[tempArray1 count];i++) 
    { 
     if([[tempArray1 objectAtIndex:i] length]==5) 
      makeString =[NSString stringWithFormat:@"%@%@`",makeString,[tempArray1 objectAtIndex:i]]; 
     else { 
      makeString =[NSString stringWithFormat:@"%@%@",makeString,[tempArray1 objectAtIndex:i]]; 
     } 

    } 
    NSLog(@"%@",makeString); 
return makeString; 
} 
+0

该方法不能返回实际的字符串,而不是只是指向字符串的指针,所以该方法的头看起来像这样 - (NSString *)makeMyString:(NSString *)stringA 但是我遇到问题试图将此方法传递给我的文本框。 – tinhead 2011-04-27 20:42:18

+0

我真正想做的是当用户输入文本字段时,连字符会在用户输入时弹出...我只是不知道该怎么做。 – tinhead 2011-04-27 21:02:11

+0

现在这个代码很好,并返回一个字符串与hypen。你可以在textview委托方法中调用这个方法,在按下每个键之后传递textfeild的文本。委托 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)范围replacementString:(NSString *)字符串 – Ishu 2011-04-28 04:00:40