2011-04-27 1 views
1

안녕 가능한 경우 사용자가 동적으로 하이픈 문자열의 모든 5 문자를 추가 할 숫자의 문자열을 입력대로 그냥 궁금으로 하이픈을동적으로 ... 내 문자열

어떤 추가 stringWithFormat을 사용하는 방법 도와 주시면 대단히 감사하겠습니다.

답변

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

+0

이 코드를 내 regTextField에 어떻게 연결합니까? 또한이 메서드의 헤더에 선언해야 할 내용이 확실하지 않습니다. – tinhead

+0

남자 ... 내가 아는 모든 것을 시도했는데 작동하지 못한다. – tinhead

0

그냥 2 개의 문자열을 선언하고 할당하십시오. 숫자를 하나의 문자열 (str 1)에 저장하고 모든 항목의 문자열 길이를 계산하십시오. 문자열 아이폰에 네 자리

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

지금 str1 = str2;

다시 4 자리의 증가와 함께 루프에서이 과정을 반복 수행 할 때 확인합니다.

희망이 도움이 될 것입니다.

+0

hrmm substrings.use의 배열을 만들 필요가 사용자가 입력 할 때 텍스트 필드에 입력합니다. 다섯 번째 문자 다음에 하이픈을 표시하고 숫자 시퀀스를 입력하는 사용자와 대화하지 않으려합니다. – tinhead

+0

마지막 문자열이 올 때 도움이됩니다. 그 시간에 사용자가 입력 한 숫자가 표시되지 않을 것이라고 생각하지 마십시오. –

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

+0

또한 하이픈 자체가 문자열의 길이에 기여한다는 사실을 고려하지 않았습니다. – titaniumdecoy

+0

죄송합니다. 여기에 늦었고 어떤 이유로 UILabel 구현 문제라고 생각했습니다. 나는 그 생각을하기 위해 주석을 추가 할 것이다. (여분의 코드는 대답 범위를 벗어날 것이기 때문에). 그것을 지적 주셔서 감사합니다. –

0

개념은 각 5 문자의 부분 문자열을 만들고 다음에 하이픈을 추가하여 각 문자를 연결합니다. 이 당신이 예 할 때 말 ....는하지만이 동적으로 사용자 유형으로 하이픈을 추가 할 경우 잘 모르겠어요,이 논리 기능

-(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

+0

내가 정말로 할 수 있기를 원하는 것은 사용자가 텍스트 필드에 타이핑 할 때 하이픈이 사용자가 입력 할 때 팝업된다는 것이다. 나는 이것을 어떻게하는지 모른다. – tinhead

+0

이제이 코드는 괜찮 으면서 하이픈으로 문자열을 반환합니다. textview delegate 메소드에서이 메소드를 호출하면 각 키를 누른 후에 textfeild의 텍스트를 전달할 수 있습니다. 델리게이트 - (BOOL) textField : (UITextField *) textField shouldChangeCharactersInRange : (NSRange) range replacementString : (NSString *) string – Ishu