UITextField
을 특정 통화 형식의 UIKeyboardType
및 특정 형식의 통화 필드로 쉽게 지정할 수있는 방법을 구현하려고합니다. 형식의 경우 대리자를 할당하고 처리하도록합니다.대리자 할당이 예정대로 해제 됨
내 .h 파일에 포함 된 파일 : @interface UITextField (Currency)
... @interface CurrencyTextFieldDelegate <UITextFieldDelegate>
및 내 .m 파일이 아래에 인쇄되어 있습니다.
UITextField *textField = [...]; [textField formatAsCurrency];
할 수 있기를 원합니다. 숫자 패드가 올바르게 표시되지만 shouldChangeCharactersInRange는 호출되지 않습니다.
내 생각에 formatAsCurrency가 실행되는 즉시 대리인이 출시됩니다. 나는 모른다. 이견있는 사람?
#import "CurrencyTextFieldDelegate.h"
@implementation UITextField (Currency)
- (void)formatAsCurrency {
CurrencyTextFieldDelegate *delegateViewController = [[CurrencyTextFieldDelegate alloc] init];
self.delegate = delegateViewController;
self.keyboardType = UIKeyboardTypeNumberPad;
}
@end
@implementation CurrencyTextFieldDelegate
@synthesize storedAmount = _storedAmount;
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSLog(@"shouldChangeCharactersInRange");
// magic happens
return NO;
}
@end
당신이하려고하는 것이 조금 분명하지 않습니다. 델리게이트는 일반적으로 텍스트 필드가 나타나는 컨트롤러입니다. 범주에 배킹 (binging ivar) 속성을 사용할 수 없으므로이 범주에서 대리자에 대한 강력한 포인터를 가질 수있는 방법이 없다고 생각합니다 . – rdelmar