자 오늘 제가 하고 싶은 일은, UITextField에 숫자를 입력할때, ","를 자동으로 집어 넣는것입니다.
1111->1,111 이런식으로 표기가 되는것이죠.
일단 값 변경이 일어 나는것을 Catch 하는 방법은 두가지가 있습니다.
UITextFieddDelegate의 "textField:shouldChangeCharactersInRage:replacementString:" 을 이용하는 방법이 하나이고,
두번째로, UITextFieldTextDidChangeNotification을 이용하는 것입니다.
UIKIT_EXTERN NSString *const UITextFieldTextDidChangeNotification;
우선, Notification을 사용하는 방식은 선호 하지 않는 방법이기도 하고, Notification을 등록하면, [textField setText:] Method가 불러 질때 에도 불러짐으로 사용하지 않고, UITextFieldDelegate Method를 구현해서 사용하도록 하겠습니다.
TextField 의 값 Setting을 UITextField 내부에서 하지 않고, 우리 쪽 소스에서 하도록 해야 합니다.
결국 shouldChange... 샬라 샬라에서 NO 를 줘서, 변경이 일어 나지 않게 합니다.
아래 소스는 UITextField 내부 구현이 아닌, 우리의 구현으로 기본적이 동작이 가능하게 하는 코드 입니다.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *newText = [textField.text stringByReplacingCharactersInRange:range withString:string];
[textField setText:newText];
return NO;
}
여기에 newText를 우리가 원하는 포맷으로 변경해주는 Formatter를 삽입하여, 콤마를 자동입력하게 할수 있습니다.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *newText = [textField.text stringByReplacingCharactersInRange:range withString:string];
[textField setText:[DataFormatter moneyFormat:newText]];
return NO;
}
iOS에서 MoneyFormatting에 관한 내용은 http://krazie99.tistory.com/49 에서 참조 하시면 됩니다 :)
이를 응용해서, iOS에서 이런저런 Auto Format Completion을 비롯한 이런저런 자동완성기능을 할 수 있을꺼라 생각됩니다.
Sample소스 첨부하니, 보시고 궁금한건 언제든 문의 하세요 ~