【发布时间】:2013-03-19 09:58:44
【问题描述】:
我正在尝试实现一种简单的方法将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
【问题讨论】:
-
有点不清楚您要做什么。委托通常是文本字段出现在其视图中的控制器。您不能在类别中拥有属性(带有支持 ivar),所以我认为没有办法在类别中拥有指向委托的强指针.
标签: ios objective-c cocoa-touch delegates uitextfield